【问题标题】:Is the Entity designer in VS 2008 just plain broken?VS 2008 中的实体设计器是否完全损坏?
【发布时间】:2011-03-21 04:11:25
【问题描述】:

我在 L2E 中使用 3 个简单的表,其用途相当简单:Users、Users_Roles、Roles。

Users 与 Users_Roles 具有 1:many 关系,在 UserID 列(唯一标识符)上引用。当时,角色与任何表都没有关系。我将所有 3 个表都带入了设计器,这反映了 Users 到 Users_Roles 的映射,而 Roles 则独自坐着。

Realizing Roles 应该以多对多关系映射到 Users_Roles,我跳进了管理工作室。我从 Roles 到 Users_Roles 建立了一个关系并保存了它。然后我跳回 VS 并在我的脑海中执行了逻辑上的下一个逻辑步骤 - 尝试通过右键单击“从数据库更新模型”来更新实体模型。它在其更新列表中显示了所有三个表。更新后,视觉关系没有改变。我尝试重新编译以查看是否进行了任何更改,但收到了两个仅在行号上有所不同的错误:

错误 3 错误 3034:从第 177、192 行开始映射片段时出现问题: 具有可能不同键的两个实体映射到 同一行。确保这两个映射片段映射两端 的 AssociationSet 到相应的列。 C:*\Model1.edmx 178 15 MVCTestApp

尝试调试错误无济于事。最终感到沮丧,删除了模型并重建了它。关系得到认可,设计师更新得当,生活很好。

这不是我第一次想把设计师带到外面埋起来,或者:大约一周前,我有勇气删除一张桌子,很快就知道在设计师中删除一张桌子only 将其从设计器中删除;它的映射保留。

所以,有几个问题:

1) 这种行为是否仅限于 VS 2008?我很快就会有 2010 年,希望设计器能按预期工作,

2) 是否有其他工具可以替代实际工作的内置设计器,

3) 有没有办法从模型中进行实际更新 - 除了删除整个模型之外,我可能还没有意识到一些技巧,从而丢失了我手动设置的所有其他关系?

【问题讨论】:

  • 据我了解,Entity Framework 4.0(在 VS2010 中可用)得到了极大的改进,尽管它在功能和成熟度上仍然落后于 nHibernate。

标签: c# visual-studio-2008 entity-framework


【解决方案1】:

坏了?说它只识别某些 DB 模式模式更正确。

EF 支持其他模式,但需要您自己编写 EDMX。如果您希望 GUI 设计器为您提供正确的一切,您需要遵循它所期望的模式。

如果 Users_Roles 只有两列,UserIdRoleId,如果它们都是各自表的 FK,并且这两列一起是表,然后映射表将正确出现,您无需进行任何工作。

否则,您必须自己研究 EDMX 格式并正确映射。正如您所发现的,这比较棘手。

【讨论】:

  • 问题不在于映射。问题是设计器本身在刷新时没有正确更新映射。如果映射在添加到 .edmx 之前存在,它只会正确识别它们;如果我添加表,然后在 MSSQL 中更改它们的架构,则无法识别新的映射(尽管 100% 正确)并且我得到了相关错误。
  • 我明白这一切。问题是 GUI 设计器重新生成 SSDL,而不是 CSDL 或 MSL。它假定您可能希望保留所做的任何自定义。如果您实质性地更改架构,则需要清除 EDMX 中的关联映射架构。
  • 感谢您的澄清 - 我现在正在学习 CSDL 和 MSL,希望这将使未来的生活更轻松。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2018-10-03
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多