【发布时间】:2011-05-18 19:10:05
【问题描述】:
我正在尝试使用 EF 4.1 Code First 建模一种“多重继承”关系。这是我正在尝试做的一个例子。
假设我正在尝试使用“用户”对象对用户与我的应用程序交互的方式进行建模。这作为基类,用于描述当前用户没有做任何特别的事情(例如访问主页)。它可能看起来像这样:
public class User
{
public Guid ID { get; set; } // Just use the forms authentication user ID
public string FirstName { get; set; }
public string LastName { get; set; }
}
现在,如果我想在网站的不同部分创建同一用户的表示,例如,作为购物者,它可能如下所示:
public class Shopper : User
{
public virtual ICollection<Orders> Orders { get; set; }
}
等等等等。当我去插入一个具有预先存在的用户条目的购物者时,它会引发异常,因为 PK 已经在用户表中。
有什么方法可以用 EF Code First 对这种 (IsA) 关系进行建模?还是我会被这样的事情困住?
public class Shopper
{
public Guid UserID { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public string FirstName
{
get { return User.FirstName; }
set { User.FirstName = value; }
}
// yada, yada, yada...
}
我想坚持 Code First 并在我的 DbContext 中为关系建模,但我不知道如何做这样的事情。谢谢!
编辑:
所以,我正在尝试做这样的事情:
public void SomeMethod ()
{
var UserID = Guid.NewGuid ();
var MyUser = new User () { ID = UserID };
SaveUserToDatabase (MyUser);
var ShopperRepresentation = GetUserAsShopper (UserID);
// Do stuff.
}
我猜基本上就像使用面向对象的角色一样。我想对该用户的每个表示使用相同的 PK,但将他们的所有基本信息存储在一个名为 User 的基类中。当然,如果我自己编写 SQL,我知道这是可能的,但我想看看 EF Code First 是否也能做到。
【问题讨论】:
标签: c# ef-code-first oop object-oriented-database