【问题标题】:Entity Framework Code First model separation from domain实体框架代码优先模型与域分离
【发布时间】:2014-01-09 18:53:07
【问题描述】:

Entity Framework Code First 最佳实践问题?

大家好,我在 NTier 应用上使用 EF codeFirst 6。

我发现我用来映射到 EF 的 poco 对象确实是 EntityFramework 特定的。举个例子吧

如果我想在对象中添加一个与 EF 无关的属性,EF 不喜欢它。 我读过您可以放置​​“NotMapped”属性,但是它开始使该对象难以维护。

也可能有不熟悉 EF 的开发人员不会理解这个问题。

我的问题是保持 EF 实体模型分开并有一个 dto 转换为/从一个域模型转换的好习惯 开发人员可以用它做他喜欢的事,而不会干扰 EF 模型,显然 EF 模型与数据库中的表是一对一的

有什么建议吗?

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-6


    【解决方案1】:

    您的问题可以通过使用Fluent API 方法而不是Attribute-based (Annotations) 方法来解决。见Entity Framework Fluent API

    您将在 DBContext 而不是实体类中配置实体映射。

    来自上面链接的文章:

    指定不将 CLR 属性映射到数据库中的列

    以下示例显示如何指定 CLR 上的属性 类型未映射到数据库中的列。

    modelBuilder.Entity<Department>().Ignore(t => t.Budget);
    

    这意味着“忽略Department 实体中的Bugdet 属性。”

    【讨论】:

    • 不过,我正在使用流利的 api(对我所能做的一切并不熟悉)。鉴于你建议的工作和一切都很好,将一个人的关注分开是“ PersistenceModel”另一个是“你想要的任何东西”,从不干涉。我想让其他从未见过摸过ef的同事更容易。
    • @user231465 我认为might 是不必要的重复,这取决于您正在处理的项目类型。我使用我的 EF 实体作为域模型,并使用 Fluent API 将它们映射到“不干扰”。顺便说一句,您的同事也应该学习他们正在研究的技术
    • 感谢您抽出宝贵时间接受您的建议,我希望了解参与“Dto”是否是最佳做法。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2020-04-10
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多