c# - 如何在表示 SQL Server 中身份字段的 POCO 上实现 ID 字段?

标签 c# repository poco factory

如果我有一个域模型,其 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/

相关文章:

C# MongoDB。在数组中查找项目并仅选择此项

linux - 克隆 Maven 存储库(Archiva 管理器)

WCF REST 服务不会返回实体的 child

Azure,DocumentDB无法将POCO对象保存为文档

entity-framework-4 - Entity Framework 4 Code First 和 new() 运算符

c# - 回发时复选框状态重置

c# - 如果隐藏某些行,datagridview 自动滚动?

c# - 无法从 docker 容器连接到 SQL Server

git - 将 git repo 恢复到之前的提交