Есть ли способ переопределить пустой конструктор в классе, созданном LINQtoSQL? - PullRequest
9 голосов
/ 17 сентября 2008

Если в моей базе данных есть таблица с именем «Пользователи», в LINQtoSQL будет создан класс с именем «Пользователь» с уже объявленным пустым конструктором.

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

Ответы [ 4 ]

11 голосов
/ 17 сентября 2008

Конструктор по умолчанию, который генерируется O / R-Designer, вызывает частичную функцию с именем OnCreated, поэтому лучше не переопределять конструктор по умолчанию, а вместо этого реализовывать частичную функцию OnCreated в MyDataClasses.cs для инициализации предметов:

partial void OnCreated()
{
  Name = "";
}

Если вы реализуете другие конструкторы, всегда старайтесь вызывать конструктор по умолчанию, чтобы классы были правильно инициализированы - например, наборы сущностей (отношения) создаются в конструкторе по умолчанию.

3 голосов
/ 17 сентября 2008

Не похоже, что вы можете переопределить пустой конструктор. Вместо этого я бы создал метод, который выполняет необходимые функции в пустом конструкторе и возвращает новый объект.

// Add new partial class to extend functionality
public partial class User {

  // Add additional constructor
  public User(int id) {
    ID = id;
  }

  // Add static method to initialize new object
  public User GetNewUser() {
    // functionality
    User user = new User();
    user.Name = "NewName";
    return user;
  }
}

Затем в другом месте вашего кода вместо использования пустого конструктора по умолчанию выполните одно из следующих действий:

User user1 = new User(1);
User user2 = User.GetNewUser();
1 голос
/ 08 апреля 2014

Установка для свойства DataContext Connection значения 'None' сработала для меня. Шаги ниже.

Откройте dbml -> Свойства правой кнопки мыши -> Обновить свойства соединения в DataContext до «None». Это удалит пустой конструктор из сгенерированного файла кода. -> Создать новый частичный класс для DataContext с пустым конструктором, как показано ниже

Partial Class MyDataContext    
    Public Sub New()             
        MyBase.New(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, mappingSource)
        OnCreated()    
    End Sub    
End Class
0 голосов
/ 03 июля 2018

Вот версия C #:

public partial class PENCILS_LinqToSql_DataClassesDataContext
{
     public PENCILS_LinqToSql_DataClassesDataContext() : base(ConnectionString(), mappingSource)
    {
    }

    public static String ConnectionString()
    {
        String CS;
        String Key;

        Key = System.Configuration.ConfigurationManager.AppSettings["DefaultConnectionString"].ToString();

        /// Get the actual connection string.
        CS = System.Configuration.ConfigurationManager.ConnectionStrings[Key].ToString();

        return CS;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...