【发布时间】:2019-01-14 08:25:04
【问题描述】:
在我的 DTO 中,我发送 Id 而不是整个对象来将一个对象分配/关联到另一个对象。问题是我的映射代码需要访问数据库来处理这个问题,因为我的实体类没有BarId 属性。
public class FooDTO
{
public int FooId { get; set; }
public int BarId { get; set; }
}
public class Foo
{
public int FooId { get; set; }
public Bar Bar { get; set; }
}
这可能可以通过向我的实体类添加额外的BarId 属性来解决,这样我就不会将数据访问与我的映射器耦合。
但问题来了:如果指定 id 的 bar 不存在,是否可以通过某种合理的方式处理以返回自定义错误消息?
public class Foo
{
public int FooId { get; set; }
public int? BarId { get; set; }
public Bar Bar { get; set; }
}
可以在我的映射代码中访问数据库并手动处理这些分配,还是通过在我的实体类中显式添加外键属性 (BarId) 将其留给 ORM 更好?
另见:https://docs.microsoft.com/en-us/ef/core/modeling/relationships#no-foreign-key-property
虽然建议在依赖实体类中定义外键属性,但这不是必需的。
好像推荐增加外键属性所以我想我会选择这条路线。
【问题讨论】:
-
在我的映射代码中访问数据库可以吗 -- 或者使用
foo.Bar?.BarId. -
@GertArnold 查询的时候是,但是更新的时候出现了问题,因为需要通过
BarId找到Bar。这需要映射器查询数据库。
标签: c# entity-framework-core automapper asp.net-core-webapi dto