【问题标题】:Namespace for entity models in a Web Site网站中实体模型的命名空间
【发布时间】:2016-03-11 19:51:40
【问题描述】:

在 Visual Studio 2012 Pro 或 Visual Studio 2015 社区版中,有没有办法为实体数据模型分配命名空间,以便在同一项目中为不同数据库集成多个模型?

我知道如果我创建一个“项目”是可能的,但如果我想创建一个网站

请注意“网站”!=“网络项目”

edmx 文件位于 App_Code 文件夹中,而在 VS2012 中,命名空间属性似乎被忽略了,因为如果我添加第二个 edmx,映射到另一个 DB,如果存在与第一个同名的表,则会发生冲突。

在 VS2015 中,如果你创建一个网站,甚至没有办法设置命名空间属性。

请注意,我说的是“网站”而不是“网络项目”。它们是不同的。

【问题讨论】:

  • 我尝试添加两个具有相同名称的表的edmx,似乎有效。你得到的确切错误是什么。
  • @wonderbell 我已将 edmx 文件放在 App_Code 的子文件夹中,关闭并重新启动 Visual Studio,并添加了命名空间。所以现在这两个 EDMX 被隔离了,我得到了更多的错误。错误是定义了两次类属性(如 User.Name,有两个来自不同 DB 的表 User,没有命名空间,属性 Name 在两个部分类 User 中定义)

标签: c# asp.net entity-framework


【解决方案1】:

我会尝试在从表生成后更改模型类名称以避免名称冲突,如 here 所示,或更准确地说是 here(更改实体名称)。

使用相同的数据模型 (POCOs) 类名可能会导致类型加载错误,因为 EF 在加载模型类型时似乎会​​忽略命名空间,如 here 所示(基本上,最安全的方法是确保该实体类名称在应用程序域中是唯一的)。

【讨论】:

  • 我将放弃一个一个更改实体名称,工作量太大,如果我必须更新模型,数据库到代码,我必须再做一次,naaah。修改 T4 模板可能是一种选择,但我不想碰它,我觉得它对自己来说不太安全。顺便说一句,我已经能够找到解决方案,并且命名空间被EF正确生成和使用,请参阅我的自动回复。
【解决方案2】:

我已将 edmx 文件放在 App_Code 的子文件夹中,关闭并重新启动 Visual Studio,并添加了命名空间。 所以现在这两个 EDMX 被隔离了,我得到了更多的错误。

所以如果你有三个不同的数据库 DB1、DB2 和 DB3,你可以在 App_Code 文件夹中创建三个不同的文件夹: App_Code\Db1Model App_Code\Db2Model App_Code\Db3Model

然后在 Db1Model 文件夹中为 DB1 创建一个新的 ADO.NET 实体数据模型。 在向导窗口中,当您必须“选择您的数据库对象和设置”时,您还可以插入“模型命名空间”。

对所有数据库重复上述任务,使用不同的命名空间并将模型放在一个新文件夹中。

如果出现错误,请尝试构建网站

“类型 Db1.TableName 已经包含 SomeDbField 的定义”

关闭 Visual Studio 并重新加载网站。

使用 Visual Studio 2012、Visual Studio 2015 社区版和 EF6 进行测试。

为什么我需要多个数据模型?

  1. 如果您需要构建从其他现有应用程序的不同数据库读取的聚合报告网站。
  2. 数据迁移项目
  3. 许多其他原因...

为什么我要使用新网站而不是新项目?

主要原因是“网站”的开发/调试速度更快,因为您不必对代码隐藏中的每一个小改动都重新编译。 部署它更容易,因为我只需要上传更改的文件。 我也可以在没有 Visual Studio 的情况下进行快速简单的更改。 更大的灵活性,更大的搞砸一切的风险。我知道,但取决于我们的工作习惯和项目需求。 欲了解更多信息,请阅读:Difference between 'Web Site' and 'Project' in Visual Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2012-04-06
    • 2013-12-14
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多