c# - 将 DTO 映射到 EF 实体时处理关系
问题描述
在我的 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
虽然建议在依赖实体类中定义外键属性,但这不是必需的。
似乎建议添加外键属性,所以我想我会选择这条路线。
解决方案
不,不好。如果您正在访问数据库,这绝对不是映射代码。
推荐阅读
- java - 在 ant 构建期间在具体类上出现抽象类错误
- reactjs - 将 id 属性插入到由 react-emotion 创建的样式化组件中
- javascript - JQUERY ASP.NET MVC - ReferenceError:索引未在 eval 中定义
- dialogflow-es - Google 助理再也找不到我的 Google Action
- c# - Automapper - IQueryable 扩展和内存中的条件映射
- laravel - “试图获取非对象的属性” Laravel
- c++ - 将 g++ 与 llvm libcxx 一起使用时,std::array::at 不被视为 constexpr
- angular5 - Angular 5:如何从列表中动态绑定按钮上的事件
- airflow - 如何知道我是否成功安装了 Apache Airflow?
- android - ConstraintLayout:minWidth 和 Ellipsize 问题