将DTO映射到EF实体时处理关系

时间:2018-08-07 09:35:52

标签: c# entity-framework-core automapper asp.net-core-webapi dto

在我的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

  

尽管建议在从属实体类中定义外键属性,但这不是必需的。

似乎建议添加外键属性,所以我想我会选择这条路线。

1 个答案:

答案 0 :(得分:1)

不,不好。如果您正在访问数据库,则绝对不是映射代码。