代码之家  ›  专栏  ›  技术社区  ›  Eric Lennartsson

是否有方法重写LinqToSQL生成的类中的空构造函数?

  •  9
  • Eric Lennartsson  · 技术社区  · 16 年前

    如果我的数据库中有一个名为“users”的表,那么LinqToSQL将生成一个名为“user”的类,该类的构造函数已经声明为空。

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

    4 回复  |  直到 16 年前
        1
  •  11
  •   Aurélien Gasser    6 年前

    由O/R-Designer生成的默认构造函数调用名为 OnCreated -因此,最佳实践不是重写默认的构造函数,而是实现分部函数 被创造的 在里面 MyDataClasses.cs 初始化项目:

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

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

        2
  •  3
  •   Yaakov Ellis NevilleDNZ    16 年前

    看起来您不能重写空构造函数。相反,我将创建一个方法来执行空构造函数中所需的功能,并返回新对象。

    // 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
  •  1
  •   Baga    10 年前

    将DataContext连接属性设置为“无”对我有效。步骤如下。

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

    Partial Class MyDataContext    
        Public Sub New()             
            MyBase.New(ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, mappingSource)
            OnCreated()    
        End Sub    
    End Class
    
        4
  •  0
  •   CoolBreeze    6 年前

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