2

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

  • 用户表分为一对用户表和成员表。
  • 数据库中的所有表都以aspnet_ 开头
  • 我已经降低了某些列的版本(用户名、电子邮件等)

为此,我已将 Membership 表中的属性复制到 User 表中(在 DB 中,这是 1<->1 关系,而不是 1<->0,1),将 aspnet_Applications 重命名为 Application,将 aspnet_Profiles 重命名为 Profile , aspnet_Users 到 User 和 aspnet_Roles 到 Role。(见图)

图片 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/c3cabe76-272d-4a33-b924-8d2c50e45e9c/EFMembership.png
链接到模型的全尺寸图片

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

  1. 使用图像中的模型我收到此错误: 从第 464 行开始映射片段中的问题:EntitySets 'UserSet' 和 'aspnet_Membership' 都映射到表 'aspnet_Membership'。他们的主键可能会发生冲突。
  2. 如果我从我的模型中删除 aspnet_Membership 表(以处理上述错误),我会得到: 从第 384 行开始的映射片段问题:必须映射表 aspnet_Membership 中的列 aspnet_Membership.ApplicationId:它没有默认值且不可为空。

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

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

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

4

2 回答 2

0

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

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

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

于 2010-03-18T13:29:35.563 回答
0

基思

Thnis在我的脑海中消失了......

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

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

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

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

朱丽叶

于 2010-03-05T22:40:01.950 回答