.net 一对一关系首先指定ef代码中创建的对象
我有两个这样的实体.net 一对一关系首先指定ef代码中创建的对象,.net,entity-framework,ef-code-first,.net,Entity Framework,Ef Code First,我有两个这样的实体 public class User : IdentityUser { public virtual Company RegisteredCompany { get; set; } .. } public class Company { public int Id { get; set; } public string Name { get; set; } } 当我尝试使用创建的公司创建新用户时 using (var ctx = new AppCo
public class User : IdentityUser
{
public virtual Company RegisteredCompany { get; set; }
..
}
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
}
当我尝试使用创建的公司创建新用户时
using (var ctx = new AppContext())
{
var company = ctx.Companies.SingleOrDefault(c => c.Id == model.CompanyId);
...
var user = new User
{
UserName = model.Msisdn,
RegisteredCompany = company,
...
};
var result = await this.UserManager.CreateAsync(user, Helper.GetUniqueKey(30));
if (!result.Succeeded)
{
...
}
...
}
我得到这样的错误
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
var company = ctx.Companies.AsNoTracking().SingleOrDefault(c => c.Id == model.CompanyId);
如果我像这样分离上下文中的对象
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
var company = ctx.Companies.AsNoTracking().SingleOrDefault(c => c.Id == model.CompanyId);
当然,它可以在数据库中看到新对象并创建新公司。如何将现有公司分配给新用户?如果要将现有实体作为导航分配给新用户,则必须将用户保存在获取公司的位置,或者必须使用外键关联,如果我不理解错误,只需说
user.CompanyID=…
,您更喜欢创建这样的实体public int RegisteredCompanyId{get;set;}[ForeignKey(“RegisteredCompanyId”)]public virtual Company RegisteredCompany{get;set;}
我不喜欢它,但如果您必须跨上下文使用导航属性,这几乎是唯一的方法。如果您可以更改UserManager.CreateAsync
方法,您还可以将当前上下文传递给它,它应该可以工作。感谢帮助。我正在处理ITI如果您想将现有实体作为导航分配给新用户,您必须将用户保存在获取公司的位置,或者,您必须使用外键关联,只需说User.CompanyID=…
如果我没有理解错,您更愿意创建这样的实体public int RegisteredCompanyId{get;set;}[ForeignKey(“RegisteredCompanyId”)]public virtual Company RegisteredCompany{get;set;}
我不喜欢它,但如果必须跨上下文使用导航属性,这几乎是唯一的方法。如果您可以更改UserManager.CreateAsync
方法,您还可以将当前上下文传递给它,它应该可以工作。谢谢您的帮助。我正在处理它