Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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#_Entity Framework_Asp.net Mvc 4_Entity Relationship - Fatal编程技术网

C# 连接实体框架关系的更简单方法?

C# 连接实体框架关系的更简单方法?,c#,entity-framework,asp.net-mvc-4,entity-relationship,C#,Entity Framework,Asp.net Mvc 4,Entity Relationship,为了规范化,我已经分离了几个模型,它们都应该是一对一的关系。由于在EF中进行1对1关系的难度,我已完成以下工作: public class Fleet : SpaceObject { public int Id{ get; set; } public int? ActiveCaptainId { get; set; } public int? ResourcesId { get; set; } [ForeignKey("ActiveCaptainId")]

为了规范化,我已经分离了几个模型,它们都应该是一对一的关系。由于在EF中进行1对1关系的难度,我已完成以下工作:

public class Fleet : SpaceObject
{
    public int Id{ get; set; }
    public int? ActiveCaptainId { get; set; }
    public int? ResourcesId { get; set; }

    [ForeignKey("ActiveCaptainId")]
    [Display(Name = "Captain in Command")]
    public virtual Captain ActiveCaptain { get; set; }

    [ForeignKey("ResourcesId")]
    public virtual Resources Resources { get; set; }
}

public class Captain
{
    public int Id{ get; set; }
    public int? FleetId { get; set; }

    [ForeignKey("FleetId")]
    public virtual Fleet Fleet { get; set; }
}

public class Resources
{
    public int Id{ get; set; }
    public int? FleetId { get; set; }

    [ForeignKey("FleetId")]
    public virtual Fleet Fleet { get; set; }
}
创建新用户时,我:

  • 首先创造一个队长
  • SaveChanges()
  • 然后创建一个舰队并将队长分配给舰队
  • SaveChanges()
  • 然后创建一个资源并将舰队分配给资源
  • SaveChanges()
  • 然后将舰队分配给船长,并将资源分配给舰队
像这样:

 Captain newCapt = new Captain();
 newCapt.Name = model.
 newCapt.UserId = db.UserProfiles.FirstOrDefault(p=>p.UserName == model.UserName).UserId;
 db.Captains.Add(newCapt);
 db.SaveChanges();

 //----Make a new Fleet
 Fleet newFleet = new Fleet();
 newFleet.ActiveCaptain = newCapt;
 newFleet.UserId = db.UserProfiles.FirstOrDefault(p=>p.UserName == model.UserName).UserId;
 db.Fleets.Add(newFleet);
 db.SaveChanges();   //commit the changes to the database

 Resources resources = new Resources();
 resources.Fleet = newFleet;
 db.Resources.Add(resources);
 db.SaveChanges();

 newFleet.Resources = resources;
 newCapt.Fleet = newFleet;
 db.Entry(newFleet).State = System.Data.EntityState.Modified;
 db.Entry(newCapt).State = System.Data.EntityState.Modified;
 db.SaveChanges();
我觉得必须有一个更简单的方法来做到这一点。有没有一种方法可以使它在创建一个新的舰队后,创建一个新的资源入口和船舶入口,等等?我认为这不可能的唯一原因是,在舰队保存到数据库之前,我无法将舰队的主键链接到资源/船长/船只等