【问题标题】:Can I load SimpleMembership classes into EntityFramework?我可以将 SimpleMembership 类加载到 EntityFramework 中吗?
【发布时间】:2015-02-08 14:05:29
【问题描述】:

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

我现在的做法是在运行时附加到数据库的 .mdf 文件上运行 EF 生成的 .sql。然后在 EF 中运行“从数据库更新模型”。结果如下图:

用户类应替换为 UserProfile(和 UserType 由 Roles),但这不会运行,因为 EF UserProfile 和 SM UserProfile 之间存在歧义。 ASP 的内部代码似乎无法处理:

CLR 类型到 EDM 类型的映射是不明确的,因为多个 CLR 类型与 EDM 类型“UserProfile”匹配

我尝试将 UserProfile 实体重命名为 aspnet_UserProfile 之类的名称,但这会导致 EF 无法找到相应的表(因为该表仍被命名为 UserProfile,它应该是因为 SM 读取的位置)。

这甚至可能吗?还是我从错误的角度来处理这个问题?

小问题:与 aspnet_regsql.exe 工具添加的类相比,为什么标准 MVC 项目使用的 .mdf 如此之小?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      请注意,Simple Memebership 提供程序附带:

      • 很难以非关系形式持久保存会员系统数据 商店。
      • 您不能将它与 OWIN 一起使用。
      • 它不适用于现有的 ASP.NET 成员资格提供程序,并且 它不可扩展。

      Entity Framework 仅使用类名来标识在 EDMX 中映射的类型,并忽略命名空间 - 这是允许将不同命名空间中的类映射到单个模型的约定。根据您的描述,您似乎有两个相同的命名实体,并且由于我上面提到的原因,它会引发错误。

      但是您可以在BLL 不同地中命名您的类(您使用了具有相同名称的类 - EF 仅使用类名来标识 EDMX 中映射的类型(名称空间被忽略))和将实体重命名为解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2016-02-27
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多