我一直在尝试将标准的ASP.NET SimpleMembership(SM)类加载到我的EntityFramework(EF)模型中,但仍然遇到了一些问题。我想在我的模型中使用UserProfile表作为一个类来将应用程序绑定到某些用户,然后让管理员决定哪个用户可以查看/编辑特定的应用程序。
我现在正在这样做的方法是在.mdf文件上运行EF生成的.sql,ASP在运行时连接到DB。然后在EF中运行“从数据库更新模型”。结果如下图:
User类应替换为UserProfile(和Roles的UserType),但由于EF UserProfile和SM UserProfile之间存在歧义,因此不会运行。 ASP的内部代码似乎无法处理:
CLR类型到EDM类型的映射是不明确的,因为多个CLR 类型匹配EDM类型'UserProfile'
我已经尝试将UserProfile实体重命名为aspnet_UserProfile,但是它导致EF无法找到相应的表(因为它仍然被命名为UserProfile,因为这是SM读取的地方)。
这甚至可能吗?或者我是从错误的角度接近这个?
小问题:为什么标准MVC项目的.mdf与aspnet_regsql.exe工具添加的类相比如此之小?
答案 0 :(得分:0)
EF不允许您拥有仅由命名空间不同的类。您可以像重命名实体,但更改映射,因此表名仍然是UserProfile。 见mapping details window。另一种选择是让映射保持不变(在更改实体名称之后,使您的表名与“UserProfile”不同),并在身份提供者WebSecurity.InitializeDatabaseConnection的初始化中指定它。
您看到的表是简化的,并且允许比旧的SQL成员资格(aspnet_regsql)更好的集成。如果您想了解有关新身份和会员背景的更多信息,请参阅Introduction to ASP.NET Identity
答案 1 :(得分:0)
请注意,Simple Memebership提供商附带:
实体框架仅使用类名来标识EDMX中映射的类型,并忽略名称空间 - 允许将来自不同名称空间的类映射到单个模型。根据您的描述,您似乎会有两个相同的命名实体,并且由于我上面提到的原因,它会抛出错误。
但是你可以用BLL 以不同的方式命名你的类(你使用了同名的类--EF只使用类名来标识EDMX中映射的类型(忽略名称空间) )并将实体重命名为变通方法。