如果我的数据库中有一个名为'Users'的表,那么LINQtoSQL会生成一个名为'User'的类,其中已经声明了一个空构造函数。
如果我想覆盖此构造函数并将自己的逻辑添加到其中,最佳做法是什么?
答案 0 :(得分:11)
由O / R-Designer生成的默认构造函数调用名为OnCreated
的部分函数 - 因此最佳做法是不覆盖默认构造函数,而是实现部分函数{{1}在OnCreated
中初始化项目:
MyDataClasses.cs
如果要实现其他构造函数,请始终注意调用默认构造函数,以便正确初始化类 - 例如,在默认构造函数中构造实体集(关系)。
答案 1 :(得分:3)
看起来你不能覆盖空构造函数。相反,我会创建一个方法来执行空构造函数中所需的功能并返回新对象。
// 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();
答案 2 :(得分:1)
将DataContext Connection属性设置为'None'对我有用。以下步骤。
打开dbml - >右键单击属性 - >将DataContext属性中的连接更新为“无”。这将从生成的代码文件中删除空构造函数。 - >使用如下所示的空构造函数为DataContext创建一个新的分部类
Partial Class MyDataContext
Public Sub New()
MyBase.New(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, mappingSource)
OnCreated()
End Sub
End Class
答案 3 :(得分:0)
这是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;
}
}