我正在做我的最后一年项目,我们声称在设计和开发过程中遵循面向对象的方法。
我的问题是:我有一个父表User
:
public partial class User
此表有其属性。
然后我有一个子表Advertiser
:
public partial class Advertiser : User
我正在使用EF6。现在请告诉我如何将数据保存到User
表中,然后获取UserID
并将其粘贴到Advertiser
表中。
问题
当我这样做时
Advertiser.AdvertiserID = User.UserID;
db.SaveChanges();
然后它说提供由于继承而产生的Advertiser
类的所有值。
答案 0 :(得分:1)
如果User
和Advertiser
在数据库中存在关系,则Advertiser
POCO中可能会User
为一对一关系。
public partial class User
{
public User() {..}
...
public virtual Advertiser Advertiser { get; set; }
}
如果是这样,您只需拨打SaveChanges
一次即可。他们成为交易。
user.Advertiser = new Advertiser
{
// No need to assign value to AdvertiserID
FirstName = "John",
LastName = "Doe"
};
db.Users.Add(user);
db.SaveChanges();
否则,他们在数据库中没有关系。你将不得不一个接一个地保存。
db.Users.Add(user);
db.SaveChanges();
advertiser.AdvertiserID = user.UserID; // UserID is filled with newly created ID
db.Advertiser.Add(advertiser);
db.SaveChanges();
答案 1 :(得分:0)
在您的示例中,广告客户与用户之间的关系不是父子关系,而是继承关系。 EF支持三种继承模型:每种类型的表,每个层次结构的表和每个具体实例的表。为了更好地了解这些设置的方式以及它们的架构外观,您可以参考(https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph),其中包含所有三个链接,或者Google EF和TPT / TPH / TPC的替代示例。 (DB-前)
在所有casses中,广告商的PK都是UserID。考虑到继承与构成,问题在于关系是否是一个"是一个"或者"有一个"。广告客户是用户,还是广告客户拥有用户?我猜想Is-A是一种准确的关系。
在Is-A关系中,"所有实体都是"用户将拥有" UserId"的PK。 (是否存在用户基表)在Has-A关系中,例如广告商具有地址,那么您会考虑多个到1或1对1之间的关系,其中广告商具有AddressID指向地址记录,或多对多有一个UserID和AddressID的连接表,将两者连接在一起。
只要保持这些关系一致,EF配置应该非常简单。