实体框架继承自SQL Membership

时间:2010-02-25 18:13:22

标签: entity-framework

我正在使用Entity Framework 3.5。我创建了一个名为“Persons”的对象,它继承自SQL Membership表(aspnet_Users),它们由UserId(Guid)以1对(0..1)关系链接,它们都属于“UserSet”。

说,我已经在会员数据库中存在一个名为“jsmith”的“aspnet_User”。如何在实体框架中创建将其链接到“jsmith”的“Person”(子)?

Guid guid = new Guid("xxxx-xxxx-xxx..")   // jsmith Guid    
User user = GetUserByGuid(guid);          // Assuming a function gets "jsmith" as "User" 

// Try 1:    
Person person = new Person();    
person.UserId = guid;    
context.AddToUserSet(person);      
context.SaveChanges();        // This doesn't work and throws an error

// Try 2:    
Person.CreatePerson(person);  // Doesn't work either, because it creates a whole new user    
context.SaveChanges();        // Throws an error

我甚至试图创建一个EntityKey并使用detach / attach,但也没有用。我做错了吗?任何帮助表示赞赏。

R.B。

2 个答案:

答案 0 :(得分:2)

You should not put SQL membership into your entity mode升。 ASP.NET成员资格是可插入的;您可以替换OpenID或域身份验证提供程序的SQL成员资格提供程序。映射SQL成员资格表使您完全依赖于该提供程序的一个版本的特定实现,这是错误的耦合。

此外,即使您这样做,继承也是错误的关系。用户拥有帐户。用户不是帐户。所以正确的关系是构成,而不是继承。

答案 1 :(得分:0)

也许“人”是示例中的错误关系。但是,如果您正在谈论通过添加更多属性(如“FirstName”,“LastName”等)来扩展ASP.NET memembership,那么这并非完全错误。有些文章谈到扩展SQL成员资格和/或创建“自定义成员资格”,方法是添加自己的db表,然后从基础MembershipUser类继承。在这种情况下,它是继承。

有些文章谈到扩展成员资格,但不是关于实体: http://www.code-magazine.com/Article.aspx?quickid=0703071

更多文章
- codesmart.wordpress.com/2009/03/27/extending-the-microsoft-aspnet-membership-provider /

此外,您可能需要考虑使用“个人档案”作为替代方案。