【发布时间】:2020-10-06 16:15:33
【问题描述】:
当我尝试添加带有子项的项时出现错误。
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“类别”中的标识列插入显式值。
我的课:
public class Product
{
public long Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Category Category { get; set; }
}
public class Category
{
public long Id { get; set; }
public string CatName { get; set; }
}
当我像这样添加新的Product 时:
var p = new Product();
p.Name = "test";
p.Description = "test 1";
var c = new Category();
c.Id = 2;
c.CatName = "Demo";
p.Category = c;
_context.Product.Add(p);
类别 (CatName = Demo, Id = 2) 已存在于数据库中。
我得到错误:
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“类别”中的标识列插入显式值。
我不想添加新的Category。当我从数据库中读取Category 时,它工作正常...
var p = new Product();
p.Name = "test";
p.Description = "test 1";
p.Category = _context.Category.Where(c => c.Id.Equals(2)).FirstOrDefault();
_context.Product.Add(p);
但我不想阅读所有(还有更多)子属性。
我做错了什么?
【问题讨论】:
-
如果您提供自己的值(身份)或不提供
id,您需要打开IDENTITY_INSERT,因为它会为您完成。另一种选择是运行查询为您执行此操作:SET IDENTITY_INSERT Category ON;您可能还需要更新您的身份模型。 -
如果您想将新产品实体连接到现有类别 - 只需将
CategoryId外键值(您应该在您的Product类上)设置为Id现有类别 - 这将是实现这一目标的最简单方法 -
@marc_s:我尝试使用 'p.Category.Id = 2',但它抛出了同样的错误 :(
-
您正在插入一个已经存在的 Id=2。将其设为 0(零)以便 EF 理解为新类别
-
使用 _context.Product.Update(p);相反...它将添加产品而不是类别...
标签: c# entity-framework