有没有办法覆盖LINQtoSQL生成的类中的空构造函数?

如果我的数据库中有一个名为’Users’的表,那么LINQtoSQL将生成一个名为’User’的类,其中已经声明了一个空构造函数。

如果我想覆盖这个构造函数并添加我自己的逻辑,那么最佳实践是什么?

由O / R-Designer生成的默认构造函数调用一个名为OnCreate的部分函数 – 因此最佳做法是不覆盖默认构造函数,而是在MyDataClasses.cs中实现部分函数OnCreated来初始化项:

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

如果要实现其他构造函数,请始终注意调用默认构造函数,以便正确初始化类 – 例如,在默认构造函数中构造实体集(关系)。

它看起来不像你可以覆盖空构造函数。 相反,我将创建一个方法,在空构造函数中执行您需要的function并返回新对象。

 // 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’对我有用。 步骤如下。

在DataContext属性中打开dbml – >右键单击属性 – >更新连接为“无”。 这将从生成的代码文件中删除空构造函数。 – >使用如下所示的空构造函数为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; } }