Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在父表中插入数据,然后在子表中插入父主键_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

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实体不需要反映类图。我更新了我的答案。