【问题标题】:Entity Framework - Merging 2 physical tables into one "virtual" table problems实体框架 - 将 2 个物理表合并为一个“虚拟”表问题
【发布时间】:2010-03-05 20:54:40
【问题描述】:

我一直在阅读有关使用 LINQ 和实体将 ASP.NET 成员资格提供程序移植到 .NET 3.5 的内容。但是,每个示例显示的 DB 模型都是较新的模型,而我继承了一个相当旧的模型。差异:

  • User 表拆分为一对User & Membership 表。
  • 数据库中的所有表都以 aspnet_ 开头
  • 我有一些列(用户名、电子邮件等)的降低版本

为此,我已将 Membership 表中的属性复制到 User 表中(在 DB 中,这是 11 关系,而不是 10,1),将 aspnet_Applications 重命名为 Application, 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:它没有默认值值并且不能为空。

我手动编辑后备商店的能力不是最好的,我不想只是破解可能会破坏其他东西的东西。我正在寻找建议、最佳实践等来处理这个问题。

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

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

【问题讨论】:

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


    【解决方案1】:

    基思

    Thnis 想不通了……

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

    似乎您的第二次尝试是进行实体拆分。但看起来您从存储模式中删除了表定义。

    我建议您将其带回并进行实体拆分(一个实体具有来自两个表的道具,如果表 1 和表 2 共享一个实体键,则这是可行的)。

    你需要一个指向演练的指针吗?我必须谷歌才能找到一个。我确定我在某处有一篇博文。

    朱莉

    【讨论】:

    • 谢谢朱莉,指针会很棒!我还在考虑将成员资格表物理合并到数据库中的用户表中,并使用几个触发器来保持这两个表同步,直到几个月后我可以删除成员资格表。
    • 我还在帖子中的图片下方添加了指向完整尺寸图片的链接。
    【解决方案2】:

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

    为此,您需要将 ApplicationId 添加回依赖它的每个实体,然后双击您在实体之间创建的关联并将两个 PK/FK 相互映射。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-04
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多