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

Posted

技术标签:

【中文标题】有没有办法覆盖 LINQtoSQL 生成的类中的空构造函数?【英文标题】:Is there a way to override the empty constructor in a class generated by LINQtoSQL? 【发布时间】:2010-09-10 02:11:34 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

由 O/R-Designer 生成的默认构造函数调用名为 OnCreated 的部分函数 - 因此最佳实践不是覆盖默认构造函数,而是在 @987654323 中实现部分函数 OnCreated @初始化项目:

partial void OnCreated()

  Name = "";

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

这是 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;
    

【讨论】:

以上是关于有没有办法覆盖 LINQtoSQL 生成的类中的空构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖生成的数据库表类中的接口方法?

继承类中的python __init__方法

如何覆盖模块中的类常量和方法?

在模板基类中为继承类中的可选覆盖生成虚拟方法

有没有办法将两个或多个不同的类链接到一个类中(然后在向量上使用)?

有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?