实体框架 - 将2个物理表合并为一个“虚拟”表问题

时间:2010-03-05 20:54:41

标签: entity-framework entity-relationship ado.net-entity-data-model

我一直在阅读使用LINQ& amp ;;将ASP.NET成员资格提供程序移植到.NET 3.5中实体。但是,每个样本显示的数据库模型是较新的模型,而我继承了一个相当旧的模型。差异:

  • 用户表格分为一对用户&会员资格表格。
  • 数据库中的所有表格都以 aspnet _
  • 为前缀
  • 我有某些列的降低版本(用户名,电子邮件等)

为了解决这个问题,我已将Membership表中的属性复制到User表中(在DB中这是1< - > 1关系,而不是1< - > 0,1),重命名为aspnet_Applications应用程序,aspnet_Profiles到Profile,aspnet_Users到User和aspnet_Roles到Role。 (见图)

Image http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/c3cabe76-272d-4a33-b924-8d2c50e45e9c/EFMembership.png
Link to full size image of model

现在,当我尝试编译时,我遇到了两个问题之一。

  1. 在图像中使用模型我收到此错误:从第464行开始映射片段中的问题:EntitySets'UserSet'和'aspnet_Membership'都映射到表'aspnet_Membership'。他们的主要钥匙可能会发生碰撞。
  2. 如果我从我的模型中删除了aspnet_Membership表(以处理上述错误),那么我得到:从第384行开始映射片段中的问题:必须映射表aspnet_Membership中的列aspnet_Membership.ApplicationId:它没有默认值价值并且不可为空。
  3. 我手工编辑后备商店的能力不是最好的,我不想只是破解可能会破坏其他东西的东西。我正在寻找建议,最佳实践等来处理这个问题。

    注意:移动数据表本身不是一个选项,因为我无法替换现有应用中的所有逻辑。我正在为新应用程序构建此EF提供程序。在接下来的6个月中,旧应用程序将逐位迁移到新结构。

    注意:我在图片下方添加了一个链接到完整尺寸的图片,以便更好地查看。

2 个答案:

答案 0 :(得分:0)

基思

Thnis不在我的头顶......

我无法真正看到你的截图。但我认为你的第一次尝试是在两个指向同一个表的实体中有重复的属性。不合法。

似乎您的第二次尝试是进行实体拆分。但是,就像你从商店架构中删除了表定义一样。

我建议你把它带回来做实体拆分(一个实体带有来自两个表的道具,如果表1和表2共享一个实体键,这是可行的。)

你需要一个指向步行的指针吗?我得去谷歌找一个。我确定我在某个地方有一篇博文。

朱莉

答案 1 :(得分:0)

我使用EF4解决了这个问题。 EF4有“FK协会”。这使您可以将PK / FK(ApplicationId)包含到实体中,并使用您通过FK映射的关联。

要执行此操作,您需要将ApplicationId添加回依赖于它的每个实体,然后双击您在实体之间创建的关联并将两个PK / FK映射到彼此。

现在,如果他们只能添加枚举支持...:/