Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS 2008中的实体设计器是否完全崩溃了?_C#_Visual Studio 2008_Entity Framework - Fatal编程技术网

C# VS 2008中的实体设计器是否完全崩溃了?

C# VS 2008中的实体设计器是否完全崩溃了?,c#,visual-studio-2008,entity-framework,C#,Visual Studio 2008,Entity Framework,我在L2E中使用了3个简单的表,它们的用途非常简单:用户、用户、角色 用户与Users\u角色有1:many关系,在UserID列(uniqueidentifier)上引用。当时,角色与任何表都没有关系。我将所有3个表都带到了设计器中,这反映了用户到用户角色的映射,而角色则单独存在 意识到角色应该映射到多:多关系中的用户角色,我跳进了ManagementStudio。我将角色与用户角色之间的关系删除并保存。然后,我跳回VS,并在脑海中进行了下一个逻辑步骤——尝试通过右键单击“从数据库更新模型”来

我在L2E中使用了3个简单的表,它们的用途非常简单:用户、用户、角色

用户与Users\u角色有1:many关系,在UserID列(uniqueidentifier)上引用。当时,角色与任何表都没有关系。我将所有3个表都带到了设计器中,这反映了用户到用户角色的映射,而角色则单独存在

意识到角色应该映射到多:多关系中的用户角色,我跳进了ManagementStudio。我将角色与用户角色之间的关系删除并保存。然后,我跳回VS,并在脑海中进行了下一个逻辑步骤——尝试通过右键单击“从数据库更新模型”来更新实体模型。它在更新列表中显示了所有三个表。更新后,视觉关系没有改变。我试图重新编译以查看是否进行了任何更改,但收到了两个错误,只是行号不同:

Error 3 Error 3034: Problem in Mapping Fragments starting at lines 177, 192: Two entities with possibly different keys are mapped to the same row. Ensure these two mapping fragments map both ends of the AssociationSet to the corresponding columns. C:*\Model1.edmx 178 15 MVCTestApp 错误3错误3034:映射从第177192行开始的片段时出现问题: 两个具有可能不同键的实体映射到 同一排。确保这两个映射片段映射两端 关联到相应列的。 C:*\Model1.edmx 178 15 MVCTestApp 试图调试错误,但无效。最终,我感到沮丧,删除了模型并重建了它。关系得到了认可,设计师得到了适当的更新,生活很好

这也不是我第一次想把设计师带到外面把它埋起来:大约一周前,我有勇气删除一个表,很快就了解到,在设计师中删除一个表只会从设计师那里删除它;它的映射保持不变

因此,有几个问题:

1) 这种行为是否仅限于VS 2008?我很快就要到2010年了,我希望设计师能像预期的那样工作

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


3) 是否有一种方法可以使模型的更新实际更新?除了删除整个模型之外,可能还有一些我不知道的技巧,从而丢失我手动设置的所有其他关系?

已中断?更正确的说法是,它只识别某些DB模式

EF支持其他模式,但您需要自己编写EDMX。如果您想让GUI设计器为您做好一切,您需要遵循它所体验的模式

如果
Users\u Roles
只有两列,即
UserId
RoleId
,并且如果这两列都是各自表的FK,并且如果这两列合在一起是表的PK,那么映射表将正确无误


否则,您必须研究EDMX格式并自己正确地进行映射。正如您所发现的,这更为棘手。

据我所知,Entity Framework 4.0(在VS2010中提供)得到了极大的改进,尽管它在功能和成熟度方面仍略落后于nHibernate。问题不在于映射。问题是设计器本身在刷新时没有正确更新映射。只有当映射在添加到.edmx之前存在时,它才能正确识别映射;如果我添加这些表,然后在MSSQL中更改它们的模式,新映射(尽管100%正确)将无法识别,并且我得到了有问题的错误。我理解所有这些。问题是GUI设计器重新生成SSDL,而不是CSDL或MSL。它假定您可能希望保留您所做的任何定制。如果您实质性地更改了模式,您需要在EDMX中为关联清除映射模式。感谢您的澄清-我现在正在关注学习CSDL和MSL,希望这将使未来的生活更轻松。