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

时间:2008-09-17 12:11:25

标签: c# .net linq linq-to-sql

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

如果我想覆盖此构造函数并将自己的逻辑添加到其中,最佳做法是什么?

4 个答案:

答案 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;
    }
}