C# 在注册期间创建多个实体

C# 在注册期间创建多个实体,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在使用实体框架和标识。我在注册时需要创建三个实体:标准应用程序用户、个人、企业。以下是我的定义: public class ApplicationUser : IdentityUser { public virtual Person Person { get; set; } } public class Person { public GUID ID {get; set} public string FirstName {get; set;} public string L

我正在使用实体框架和标识。我在注册时需要创建三个实体:标准应用程序用户、个人、企业。以下是我的定义:

public class ApplicationUser : IdentityUser
{
  public virtual Person Person { get; set; }
}

public class Person
{
  public GUID ID {get; set}
  public string FirstName {get; set;}
  public string LastName {get; set;}
  public System.DateTime? BirthDate{get; set;}
  public string email {get;set;}

  //ForeignKeys
  public virtual Business Manager {get; set;}
  public virtual Business Executive {get; set;}
  public virtual Business Employees {get; set;}
}

public class Business
{
  public Guid ID {get; set;}
  public string Name {get; set;}
  public string Registrtion {get; set;}

  //Collections
  public ICollection<Person> Managers {get;set;}
  public ICollection<Person> Executives {get; set;}
  public ICollection<Person> Employees {get; set;}

  public Business()
  {
    this.ID = Guid.NewGuid();
    public string BusinesName {get; set}
    public person Owner {get; set;}
    Managers= new List<Person>();
    Executives = new List<Person>();
    Employees = new List<Person>();
  }
}
我有一个注册页面,用户可以选择注册为个人或企业。我的方法如下:

public async Task<ActionResult> Register(RegisterViewModel model)
{
  if (ModelState.IsValid)
  {
    Business business;
    var user = new ApplicationUser
    {
      UserName = model.Email,
      Email = model.Email,
      Person = new Person
      {               
        FirstName = model.FirstName,
        LastName = model.LastName,
        Landline = model.Landline,
        emailAddress = model.Email
      }
    };

    //I'm then checking the model fields to see if they need to be setup as a Busines or not. 
    if (model.createBusinessAccount)
    {
      business = new Business
      {
        BusinessName = model.BusinessName,
        Owner = person
      };
      business.Members.Add(person);
      person.Business = business;
      db.Businesses.Add(business);
    }
    var result = await UserManager.CreateAsync(user, model.Password);
    if (result.Succeeded)
    {
      await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
      db.SaveChanges(); //<<<<<I get an error at this step. 
      return RedirectToAction("Index", "Home");
    }
    AddErrors(result);
  }
  // If we got this far, something failed, redisplay form
  return View(model);
}//End
我得到一个错误:

属性“ID”是对象密钥信息的一部分,无法修改

虽然除了为业务实体生成密钥之外,我没有修改任何ID。
我是否需要db.SaveChanges?我假设我需要这个,没有这个db.business.Addbusiness;未反映在数据库中。我还假设wait Usermanager.Createasync也提交到数据库,但未存储业务实体

可能是因为这个.ID=Guid.NewGuid;?在您的业务类中?我必须将其放入以生成guid,您是否建议使用数据库中的guid?如果您需要从c生成Id,请尝试使用DatabaseGenerateOption装饰Id字段。无我只是使用[Key][DatabaseGeneratedDatabaseGenerateOption.None]尝试过,但运气不佳,在同一个地方发生了同样的错误。我一直在破解这个问题,如果我使用一个新的上下文,它似乎部分有效。但是,我需要将注册的user.person添加到Business.People.add。。。当我这样做时,它正试图为用户创建一个新实体。