Entity Framework:将身份 2 用户与产品模型相关联
Entity Framework: relate identity 2 user to product model
我正在使用 Web API 2 和 Entity Framework 6 以及 Identity 2
我有一个与 ApplicationUser
模型相关的产品模型,我在其中创建 Product
,但出现错误:
Additional information: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
我的模特:
public class Product {
public int id { get; set; }
public string url { get; set; }
public string name {get;set}
public ApplicationUser user { get; set; }
}
我的创建代码:
public IHttpActionResult PostProduct(Product product) {
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
product.user = userManager.FindById(User.Identity.GetUserId());
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
db.Products.Add(product);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = product.id }, product);
}
"db" 指的是什么 dbcontext?
我猜您可能有多个 dbcontext,并且您正在尝试从一个 dbcontext 检索数据并将其保存到另一个。
也许您可以更改代码,为每个 http 请求只创建一个 dbcontext,并在您的 http post 请求期间重用该上下文。
可能会改变:
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
至:
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
这样可以保存您的产品,但您应该避免发回 EF 对象,或者至少关闭延迟加载。
澄清一下,不要在 return 中发送回 product
,因为它包含用于延迟加载的 EF 代理属性。这最多会导致序列化产品对象时返回的数据比您想要返回的数据多得多,最坏的情况是 - 您在评论中描述的错误。
我正在使用 Web API 2 和 Entity Framework 6 以及 Identity 2
我有一个与 ApplicationUser
模型相关的产品模型,我在其中创建 Product
,但出现错误:
Additional information: An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
我的模特:
public class Product {
public int id { get; set; }
public string url { get; set; }
public string name {get;set}
public ApplicationUser user { get; set; }
}
我的创建代码:
public IHttpActionResult PostProduct(Product product) {
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
product.user = userManager.FindById(User.Identity.GetUserId());
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
db.Products.Add(product);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = product.id }, product);
}
"db" 指的是什么 dbcontext?
我猜您可能有多个 dbcontext,并且您正在尝试从一个 dbcontext 检索数据并将其保存到另一个。
也许您可以更改代码,为每个 http 请求只创建一个 dbcontext,并在您的 http post 请求期间重用该上下文。
可能会改变:
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
至:
ApplicationUserManager userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
这样可以保存您的产品,但您应该避免发回 EF 对象,或者至少关闭延迟加载。
澄清一下,不要在 return 中发送回 product
,因为它包含用于延迟加载的 EF 代理属性。这最多会导致序列化产品对象时返回的数据比您想要返回的数据多得多,最坏的情况是 - 您在评论中描述的错误。