我正在使用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。
答案 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 /
此外,您可能需要考虑使用“个人档案”作为替代方案。