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。。。当我这样做时,它正试图为用户创建一个新实体。