C# 在父表中插入数据,然后在子表中插入父主键
我正在做我最后一年的项目,我们被要求在设计和开发过程中遵循面向对象的方法 我的问题是:我有一个父表C# 在父表中插入数据,然后在子表中插入父主键,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在做我最后一年的项目,我们被要求在设计和开发过程中遵循面向对象的方法 我的问题是:我有一个父表User: public partial class User public partial class Advertiser : User 此表有其属性 然后我有一个子表广告商: public partial class User public partial class Advertiser : User 我正在使用EF6。现在请告诉我如何将数据保存到User表中,然后获取UserID并
User
:
public partial class User
public partial class Advertiser : User
此表有其属性
然后我有一个子表广告商:
public partial class User
public partial class Advertiser : User
我正在使用EF6。现在请告诉我如何将数据保存到User
表中,然后获取UserID
并将其粘贴到广告客户
表中
问题
当我这么做的时候
Advertiser.AdvertiserID = User.UserID;
db.SaveChanges();
然后它说提供由于继承而存在的广告客户
类的所有值。如果用户
和广告客户
在数据库中有关系,您可能在用户
POCO中有广告客户
一对一关系
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();
在您的示例中,广告客户和用户之间的关系不是父子关系,而是继承关系。EF支持三种继承模型:每个类型的表、每个层次结构的表和每个具体实例的表。为了更好地理解这些是如何设置的,以及它们的模式将是什么样子,您可以参考()这三个都有链接,或者参考GoogleEF和TPT/TPH/TPC作为替代示例。(DB优先)
在所有案例中,广告商的主键都是UserID。考虑到继承与组合,问题在于关系是“是a”还是“有a”。广告商是用户还是有用户?我想这是一种精确的关系
在Is-A关系中,“是”用户的所有实体都将具有“UserId”的PK。在HAS-A关系中(例如,是否存在用户基表),例如广告商有一个地址,那么你会考虑像MANY-T-1或1-T-1这样的关系,在那里广告商有一个地址来指向一个地址记录,或者一个多对多的用户表和地址表的连接表将两个链接链接在一起。
只要保持这些关系的一致性,EF配置就应该非常简单 感谢您的快速响应,但正如我所说的,我必须实现面向对象的方法,所以有一件事也即将出现,那就是“类广告商:用户”。所以实体框架迫使我做广告客户.FirstName。FirstName来自已插入数据库的用户表。但若我尝试使用广告客户表插入数据,那个么我也失败了。你们不能有这样的东西:类广告客户:用户
。这是错误的。子表不必从父表继承,但我已经在类图中展示了这一点,所以我将如何在项目团队面前捍卫这一点。提示将被高度赞赏。再次感谢。@DanishShabbir正如Alexei所说,我们不在实体框架中进行继承;POCO实体不需要反映类图。我更新了我的答案。