9

如果我的数据库中有一个名为“Users”的表,则会有一个由 LINQtoSQL 生成的名为“User”的类,该类已声明为空构造函数。

如果我想重写这个构造函数并向它添加我自己的逻辑,最佳实践是什么?

4

4 回答 4

11

由 O/R-Designer 生成的默认构造函数调用一个名为的部分函数OnCreated- 所以最佳实践不是覆盖默认构造函数,而是实现部分函数OnCreatedMyDataClasses.cs初始化项目:

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

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

于 2008-09-17T14:30:45.990 回答
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();
于 2008-09-17T12:17:46.527 回答
1

将 DataContext Connection 属性设置为“无”对我有用。下面的步骤。

打开 dbml -> 右键单击​​属性 -> 将 DataContext 属性中的连接更新为“无”。这将从生成的代码文件中删除空构造函数。-> 使用如下所示的空构造函数为 DataContext 创建一个新的部分类

Partial Class MyDataContext    
    Public Sub New()             
        MyBase.New(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, mappingSource)
        OnCreated()    
    End Sub    
End Class
于 2014-04-08T11:39:42.913 回答
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;
    }
}
于 2018-07-03T19:14:29.057 回答