【问题标题】:EntityFramework or LinqToSql Entity NamespaceEntityFramework 或 LinqToSql 实体命名空间
【发布时间】:2009-11-29 22:27:03
【问题描述】:
我想根据我的域结构指定实体命名空间。
通常是这样的:
Infrastructure.SqlServer
- 客户(NS:Infrastructure.SqlServer.Customers)
- 产品(NS:Infrastructure.SqlServer.Products)
如何使用 LinqToSql 或 EntityFramework 做到这一点?似乎我们只能指定一个唯一的“实体命名空间”,例如 Infrastructure.SqlServer.Entities
谢谢。
【问题讨论】:
标签:
linq-to-sql
entity-framework
domain-driven-design
【解决方案1】:
EF 可以做到这一点,但我不建议这样做。
问题是您必须进入 EDMX 并手动编辑 XML(即离开设计器)以在 EDMX 文件的 CSDL 部分中创建多个模式。
在我看来绝对不值得麻烦。
亚历克斯
【解决方案2】:
我已经在我们的应用程序中做到了这一点。我们的实体命名空间基于我们的 SQL Server 架构。每个命名空间都在它自己的 DBML 中。不幸的是,L2S 无法对跨 .DBML 文件的关系进行建模,但我们已经在一定程度上解决了这个问题。
兰迪
【解决方案3】:
您可以通过消除每个不需要的表来在数据库架构上创建单独的模型。您可以使用 L2S 或实体框架来执行此操作。我猜这不是你的意思。您将无法在查询中包含来自两个模型的实体。
你可能想要什么...
大多数人出于维护原因这样做;即将模型拆分为模块化块。我自己对此进行了很多实验。有一篇文章here如果你决心坚持。手动编辑详细的 EDMX 文件
目前非常笨拙且容易出错。如果您的要求是您想要的拆分的总范围,那可能很好。如果你有一个更大的架构和更多的拆分,你可能会觉得太痛苦了。
这显然是许多人想要的功能,并且需要用于典型的企业数据库。从长远来看,这可能会得到解决,但现在我的建议是解决这个问题。
完整地说,LinqToSQL 不支持以任何方式拆分模型。