【问题标题】:Access modifier for default constructor in LINQ2SQL generated classesLINQ2SQL 生成的类中默认构造函数的访问修饰符
【发布时间】:2011-07-09 19:47:07
【问题描述】:

这里刚开始使用 LINQ2SQL,我有几个问题。

我有一个带有单个表 Customer 的 db,我运行 sqlmetal,它为我生成了一个 ORM 类。

我想在 Customer 的构造函数中应用某些规则,可能类似于 必须提供 Customer 的 firstName、lastName 成员。

我在 sqlmetal 生成的 Customer 类中创建了一个新的构造函数来 取2个参数firstName,secondName然后标注默认无参数 构造函数是内部的,因为我不想将它暴露给任何消耗它的东西 组装。

当我尝试 SubmitChanges() 时,我的代码开始抱怨,因为无参数构造函数从公共到内部的新保护级别。

List<Customer> customerList = new List<Customer>();
customerList = dbInstance.Customer.ToList();
Customer customerToDelete = customerList.Where(c => c.Customer_id == 100).First();
dbInstance.Customer.DeleteOnSubmit(customerToDelete);
dbInstance.SubmitChanges(); <-- error thrown

“没有为此对象定义无参数构造函数”

为什么访问修饰符必须在 Customer ORM 类的默认构造函数中公开?当它公开时,它会按预期工作。

【问题讨论】:

  • 有趣的是,如果它需要它来实现对象,我不会感到惊讶。奇怪的是它需要提交它们。

标签: c# linq-to-sql


【解决方案1】:

LinqToSql 生成部分类,因此您可以使用它。也不要编辑生成的文件。更新模型后,您将丢失所有更改。

【讨论】:

  • 在另一个标记为部分的客户类中拥有业务逻辑将允许 i) 业务/数据逻辑的分离和 ii) 允许在不丢失任何业务数据的情况下重建数据层。所以我同意你的观点,但如果你想隐藏无参数构造函数或更改部分 ORM 类公开的某些属性的访问修饰符怎么办?
猜你喜欢
  • 2012-11-12
  • 2017-01-12
  • 2014-04-01
  • 2014-03-27
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多