LINQ 2 SQL: частичные классы - PullRequest
2 голосов
/ 13 апреля 2010

Мне нужно установить ConnectionString для моего DataContext на основе AppSetting. Я пытаюсь сделать это, создав частичный класс для каждого DataContext. Ниже то, что я имею до сих пор, и мне интересно, если я что-то упускаю?

В частности, правильно ли я обращаюсь с моим DataContext (удаление, устаревание и т. Д.)?

При этом у меня будут проблемы с обновлениями и вставками? Является ли файл BLLAspnetdb.cs полезным или необходимым по меньшей мере или все это должно быть в сгенерированном файле partial class AspnetdbDataContext?

Короче говоря, это приемлемая структура или это вызовет у меня проблемы при разработке?

Имя файла dbml = Aspnetdb.dbml

Имя файла частичного класса = Aspnetdb.cs

partial class AspnetdbDataContext
{
    public static bool IsDisconnectedUser
    {
        get
        {
            return Convert.ToBoolean(ConfigurationManager.AppSettings["IsDisconnectedUser"]) == true;
        }
    }
    public static AspnetdbDataContext New
    {
        get
        {
            var cs = IsDisconnectedUser ? Settings.Default.Central_aspnetdbConnectionString : Settings.Default.aspnetdbConnectionString;
            return new AspnetdbDataContext(cs);
        }
    }
}

Имя моего созданного файла = BLLAspnetdb.cs

public class BLLAspnetdb
{
    public static IList WorkerList(Guid userID)
    {
        var DB = AspnetdbDataContext.New;
        var workers = from user in DB.tblDemographics
                          where user.UserID == userID
                          select new { user.FirstName, user.LastName, user.Phone };

        IList theWorkers = workers.ToList();

        return theWorkers;
    }

    public static String NurseName(Guid? userID)
    {
        var DB = AspnetdbDataContext.New;

        var nurseName = from demographic in DB.tblDemographics
                        where demographic.UserID == userID
                        select demographic.FirstName +" " + demographic.LastName;

        return nurseName.SingleOrDefault();
    }

    public static String SocialWorkerName(Guid? userID)
    {
        var DB = AspnetdbDataContext.New;

        var swName = from demographic in DB.tblDemographics
                        where demographic.UserID == userID
                        select demographic.FirstName + " " + demographic.LastName;

        return swName.SingleOrDefault();
    }
}

см. Этот предыдущий вопрос и принятый ответ для фона о том, как я попал сюда ... Выключатели ConnectionStrings-между-местного и дистанционного-с-LINQ к SQL

1 Ответ

1 голос
/ 13 апреля 2010

Вы должны избавиться от своего контекста, так как он одноразовый. Подумайте об обёртывании операторов в блоке using при создании нового контекста.

Возможно, вместо этого я бы выразил статическое свойство "New" как метод "Create". Это не нормально для свойств создавать новые объекты, поэтому другие разработчики, которым необходимо использовать код, могут быть удивлены таким поведением.

Кроме этого, ваш подход будет работать. Когда вы получаете свой контекст, запускается логика для определения строки подключения, и вы получите контекст, созданный с правильной строкой подключения.

Я бы не все ваши методы и свойства были статичными на вашем месте. Он не поддается хорошему ОО-дизайну и делает вас очень привязанным к конкретной реализации - однако, я думаю, это не входит в сферу вопроса.

...