我可以将SimpleMembership类加载到EntityFramework中吗?

时间:2015-02-08 14:05:30

标签: c# asp.net asp.net-mvc entity-framework simplemembership

我一直在尝试将标准的ASP.NET SimpleMembership(SM)类加载到我的EntityFramework(EF)模型中,但仍然遇到了一些问题。我想在我的模型中使用UserProfile表作为一个类来将应用程序绑定到某些用户,然后让管理员决定哪个用户可以查看/编辑特定的应用程序。

我现在正在这样做的方法是在.mdf文件上运行EF生成的.sql,ASP在运行时连接到DB。然后在EF中运行“从数据库更新模型”。结果如下图:

Blue=My EF classes/Green=imported ASP SM classes

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工具添加的类相比如此之小?

2 个答案:

答案 0 :(得分:0)

EF不允许您拥有仅由命名空间不同的类。您可以像重命名实体,但更改映射,因此表名仍然是UserProfile。 见mapping details window。另一种选择是让映射保持不变(在更改实体名称之后,使您的表名与“UserProfile”不同),并在身份提供者WebSecurity.InitializeDatabaseConnection的初始化中指定它。

您看到的表是简化的,并且允许比旧的SQL成员资格(aspnet_regsql)更好的集成。如果您想了解有关新身份和会员背景的更多信息,请参阅Introduction to ASP.NET Identity

答案 1 :(得分:0)

请注意,Simple Memebership提供商附带:

  • 很难将会员系统数据保存在非关系型中 存储。
  • 您不能将其与OWIN一起使用。
  • 它与现有的ASP.NET成员资格提供程序不兼容,并且 它不可扩展。

实体框架仅使用类名来标识EDMX中映射的类型,并忽略名称空间 - 允许将来自不同名称空间的类映射到单个模型。根据您的描述,您似乎会有两个相同的命名实体,并且由于我上面提到的原因,它会抛出错误。

但是你可以用BLL 以不同的方式命名你的类(你使用了同名的类--EF只使用类名来标识EDMX中映射的类型(忽略名称空间) )并将实体重命名为变通方法。