Есть ли способ переопределить пустой конструктор в классе, сгенерированном LinqToSql?

StackOverflow https://stackoverflow.com/questions/82409

  •  01-07-2019
  •  | 
  •  

Вопрос

Если у меня есть таблица в моей базе данных с именем "Users", там будет класс, сгенерированный LinqToSql с именем "User" с уже объявленным пустым конструктором.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

// 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();

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

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

Partial Class MyDataContext    
    Public Sub New()             
        MyBase.New(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, mappingSource)
        OnCreated()    
    End Sub    
End Class

Вот версия 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top