如果我有一个域模型,其 ID 映射到 SQL Server 标识列,那么包含该字段的 POCO 看起来像什么?
候选人 1:允许任何人设置和获取 ID。我认为我们不希望任何人从 SQL 表中设置 ID,除了 Repository。
public class Thing {
public int ID {get;set;}
}
候选者 2:允许某人在创建时设置 ID,但在我们创建对象之前我们不会知道 ID(工厂创建一个空白的 Thing 对象,其中 ID = 0,直到我们持久化它)。持久化后如何设置ID?
public class Thing {
public Thing () : This (ID: 0) {}
public Thing (int ID) {
this.ID = ID
}
private int _ID;
public int ID {
get { return this.ID;};
}
考生3:设置ID的方法?
我们需要以某种方式允许存储库设置 ID,而不允许消费者更改它。有任何想法吗?这是找错树了吗?我们是否将对象发送到存储库、保存它、丢弃它,然后从加载的版本创建一个新对象并将其作为一个新对象返回?
最佳答案
如果基础值已经非零,公共(public) get 访问器和内部 set 访问器会抛出 InvalidOperationException 怎么样?
显然,您已经有了一些具体化该字段的方法,这样您甚至可以加载记录。为什么不使用相同的机制呢?毕竟,您需要考虑的不仅仅是身份值(value)。它基本上是插入/更新后可以在数据库中更改的任何值,例如计算列、受触发器影响的列等。
关于c# - 如何在表示 SQL Server 中身份字段的 POCO 上实现 ID 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946957/