【问题标题】:With a database-first approach, how do I separate my Core and Infrastructure layers?使用数据库优先的方法,我如何分离核心层和基础设施层?
【发布时间】:2013-07-16 02:23:23
【问题描述】:

根据onion architecture,我的“核心”或“域”层中应该有我的域模型(用户、学生、教师),而“基础设施”层中应该有我的 DbContext。

我在我的 MVC4 应用程序中使用 Entity Framework 5,并且我正在使用 ADO.NET 数据库优先方法(应用程序的数据库已经存在)。由于 ADO.NET 为我生成实体(.edmx 文件),我如何将域与数据库层分开?

目前我在 Core 中有我的实体模型,但这不会破坏架构,因为 Core 不应该知道如何访问数据?

【问题讨论】:

    标签: asp.net-mvc entity-framework onion-architecture


    【解决方案1】:

    嗯,当 EF 人决定命名基于 EF 构建应用程序的不同方式时,他们并没有选择最好的措辞!

    Rowan Miller本人:

    诚然,“代码优先”并不是最好的名称选择……代码优先是 实际上只是 EF 设计器的基于代码的替代方案,它支持 创建新数据库或映射到现有数据库。使用代码 首先针对现有数据库通常称为“代码第二” 因为……嗯……你先有数据库,然后再写代码 第二个。

    也就是说,您现在知道,即使您从现有数据库开始您的项目,也可以摆脱 EDMX。
    请查看that article 了解分步过程。

    一旦生成了所有内容,只需将内容放在正确的位置以使您的Core 层不可知。

    看看这个SO answer 我帮助了遇到类似问题的人。

    【讨论】:

    • 这句话真的很有趣——我不知道。自己写东西可能是一种方法,但是如果我的数据库很大怎么办?有很多要写的。此外,我非常喜欢设计器的功能(可视化、简单的映射)。是否可以吃我的蛋糕并拥有它?我可以使用 ADO.NET 生成器并仍然以有意义的方式拆分吗?
    • 几乎没有什么可写的,因为您的代码将被生成。如果您的数据库很大,那么您将有很多生成的类! EDM 设计器很酷,但它不会让您做所有使用代码优先方法可以做的事情。您仍然可以使用 EDMX 以有意义的方式拆分事物,您只需将生成模型的 T4 模板移动到单独的项目中并对其进行编辑,使其在正确的位置找到源 EDMX。但请记住,使用 EDMX 可能不太容易测试。
    • 不幸的是,我发现有两个 Visual Studio 扩展可以帮助实现这种方法:Entity Framework Power Tools 和“CodeSecond”只有 C#,我使用的是 VB.NET。
    • 嗯,您可以在同一个解决方案中混合使用 VB.Net 和 C# 程序集。生成的类非常简单,将它们放在 C# 中并在 VB.Net 中编码其他层并不是一件容易的事。但是,如果您真的不愿意使用 C#,则可以使用工具将 C# 转换为 VB.Net,反之亦然!
    • 我更喜欢 C#,而且我可以轻松使用两者,但我的同事使用 VB.NET。不过建议很好,我可能会这样做。
    猜你喜欢
    • 2020-06-05
    • 2019-01-27
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2014-06-22
    • 2017-03-21
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多