使用默认成员关系的 MVC3 实体框架

Posted

技术标签:

【中文标题】使用默认成员关系的 MVC3 实体框架【英文标题】:MVC3 Entity Framework using default membership relationships 【发布时间】:2011-05-29 20:45:14 【问题描述】:

我想在自定义表(网站)和与用户相关的默认 aspnet 表之间创建关系。

我使用代码优先,所以对于大多数 FK 关系我会这样做

public ModelName ModelName  get; set; 

这样,EF 将自动创建 FK 关系。很简单。

令人困惑的是挂钩到 aspnet 用户/成员表的最有效方法。我是否创建了一个新模型用户作为接口,以便我可以实现自定义用户代码?

是否有适合 EF 最佳实践的最佳方法?我基本上只是想将用户与网站表/模型相关联,以便 EF 可以做它的事情。

【问题讨论】:

【参考方案1】:

“我是否创建了一个新模型用户作为接口,以便我可以实现自定义用户代码?”

如果您想要灵活性,我会说这是要走的路。如果您将来想更改为某种不同的身份验证数据库结构,这样会更容易。

例如,有一个“AppUser”实体,其中对应的表具有指向 aspnet_Membership 表的“UserID”列的外键。这样,您可以简单地向“AppUser”实体添加属性,而不是尝试更改 MS 表结构(这可能是一个真正的痛苦)。您仍然可以使用 MvcMembership starter Kit DLL 之类的东西与 MVC 项目中的内置 MS Membership 类和函数进行交互。

https://github.com/TroyGoode/MembershipStarterKit

希望这会有所帮助!

【讨论】:

【参考方案2】:

这有几个先决条件:

ASP.NET 表必须与您自己的表位于同一数据库中 先前的前提条件意味着您必须手动创建数据库和表(无需自动生成代码优先),或者您必须使用一些自定义初始化程序,将非映射的 ASP.NET 表添加为数据库重建的一部分

如果您希望您的模型类与 ASP.NET 表有关系,您必须将 ASP.NET 表建模为另一个实体。我不确定您是否可以为此使用 ASP.NET 类,因为例如 MembershipUser 没有 EF 所需的无参数公共构造函数。因此,您很可能需要创建重复的类及其映射,并在引用 ASP.NET 实体时使用这些类。

【讨论】:

根据您的经验,asp mvc 中的大多数应用程序是否使用此约定,或者是否有其他通常使用的登录系统?

以上是关于使用默认成员关系的 MVC3 实体框架的主要内容,如果未能解决你的问题,请参考以下文章

实体框架代码优先的多对多关系的最佳方法

如何在实体框架中定义除默认方法之外的外键关系

如何让asp.net成员提供者和实体框架共享同一个数据库

EF实体框架之CodeFirst六

使用 mvc3 将图像保存到文件系统

实体框架代码优先,同一张表上的多对多关系