【发布时间】:2015-10-26 00:13:23
【问题描述】:
我正在尝试为我当前的项目关注 DDD。我的问题专门针对包含我的域模型值的 POST 请求。为简化起见,假设以下是我的领域模型:
class Person
{
public int Id {get, set};
public string name {get, set};
}
以下是支持以上领域的实体模型:
class PersonEF
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get, set};
public string name {get, set};
}
现在,当我收到创建新 Person 的 POST 请求时,它不包含 ID,因为它应该由数据库生成。我首先使用 AutoMapper 将 Person 映射到 PersonEF,AutoMapper 将 PersonEF 中的 Id 设置为 0,因此数据库中的 INSERT 失败。因此,要解决这些问题,我的选择是:
将 ID 命名为 Person 中的其他内容。如果我这样做,那么我将不得不为 GET 请求的 Id 编写自定义映射。
在 Person 和 PersonEF 中使 Id 可以为空(int?),这样自动递增将起作用,但是将键设置为可以为空的 int 本身听起来并不是一个好主意。
所以请建议最好的方法来做到这一点。
编辑
我的错。代码缺少 context.SaveOrUpdate()。我添加了它,它按预期工作。
【问题讨论】:
-
您确定自动递增的 ID 是最好的方法吗?如果您需要一些指导来决定 ID 设计,请参阅this answer of mine。我不知道 EF 的具体细节,但 GUID ID 可能更容易处理。
标签: asp.net-mvc entity-framework asp.net-web-api domain-driven-design