我一直在阅读有关使用 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
链接到模型的全尺寸图片
现在,当我尝试编译时遇到了两个问题之一。
- 使用图像中的模型我收到此错误: 从第 464 行开始映射片段中的问题:EntitySets 'UserSet' 和 'aspnet_Membership' 都映射到表 'aspnet_Membership'。他们的主键可能会发生冲突。
- 如果我从我的模型中删除 aspnet_Membership 表(以处理上述错误),我会得到: 从第 384 行开始的映射片段问题:必须映射表 aspnet_Membership 中的列 aspnet_Membership.ApplicationId:它没有默认值且不可为空。
我手动编辑后备商店的能力不是最好的,我不想只是破解可能会破坏其他东西的东西。我正在寻找建议、最佳实践等来处理这个问题。
注意: 移动数据表本身不是一种选择,因为我无法替换现有应用程序中的所有逻辑。我正在为一个新的应用程序构建这个 EF 提供程序。在接下来的 6 个月中,旧应用程序将逐步迁移到新结构。
注意: 我在图片下方添加了一个指向完整尺寸图片的链接,以便更好地查看。