【问题标题】:MVC 2 and Entity Framework - Should I put Entity classed in separate layer?MVC 2 和实体框架 - 我应该将实体类放在单独的层吗?
【发布时间】:2014-05-18 07:53:28
【问题描述】:

我正在尝试查找有关使用 MVC 2 和实体框架时首选解决方案设置的一些信息,对我来说,将此 Web 应用设置为 3 层似乎是最直观的:

  • MyProject.Web(用于演示的 MVC 项目)
  • MyProject.Data(使用实体框架与数据库对话的数据网关层)
  • MyProject.Tests(设置新 MVC 项目时创建的测试项目)

这似乎与我找到的示例相反,并且文档(例如,NerdDinner 示例)将 MVC 项目视为直接与数据库进行调解。 NerdDinner 示例将数据访问置于与 MVC 模型混合的存储库类中。

我尝试了对我来说最好的方式,并在我单独的 Data 项目中创建了我的“ADO.NET 实体数据模型”项目,但是当我尝试使用 MVC 时这给了我一个错误列出其中的项目:

“无法加载指定的元数据资源。”

除非我的 MVC 项目中也有实体数据模型的副本。

在我深入调查此错误之前,我想知道我是否只是在与纯粹主义框架作斗争,而我只能在我的存储库中使用数据访问权限。

所以: - 是否有可能或建议将我的实体框架定义放在另一个项目中? - 以这种方式分离是否会牺牲某些其他 MVC 功能? (例如,验证?) - 如果我正朝着正确的方向前进并且其他人也同意,那么是否还有其他示例或文档有人可以指出我?

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    是的,我认为将实体放在单独的程序集中是个好主意。

    修复“无法加载指定的元数据资源”错误的一种方法是在连接字符串中明确指定程序集:

    <connectionStrings>
        <add name="MyEntities" connectionString="metadata=res://*/AssemblyName.bin.Namespace.MyEntities.csdl|res://*/AssemblyName.bin.Namespace.MyEntities.ssdl|res://*/AssemblyName.bin.Namespace.MyEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SERVER_NAME;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/>
    </connectionStrings>
    

    请特别注意AssemblyName.bin.Namespace.MyEntities。这是程序集限定的资源名称(假设程序集称为“AssemblyName.dll”。您可能需要在第一次执行此操作时使用 Reflector 来确定它。

    This answer 也可能会有所帮助。

    【讨论】:

    • 太棒了 - 谢谢 :> 仍然出现错误。会多玩一些。干杯。
    【解决方案2】:

    当然可以将您的实体框架定义放在另一个项目中。就个人而言,如果数据层需要由多个接口(MVC、WCF、WPF)共享,我会将其保存在另一个项目中。

    看看这两篇关于构建和使用 EntityConnection 的 MSDN 文章。

    Build an EntityConnection

    Use EntityConnection with an Object Context

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多