当调用上下文中的Attach方法将对象附加到上下文时,应该将负序号临时分配给Identity属性。在我的情况下,该值似乎是永久性的,最终将对象保存到数据库时会出错。
public virtual void Insert(TEntity entity)
{
entity.ObjectState = ObjectState.Added;
_dbSet.Attach(entity);
_context.SyncObjectState<TEntity>(entity);
}
public class Tier:Entity
{
public Tier()
{
}
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TierID { get; set; }
public string CountryID { get; set; }
public string TierName { get; set; }
public int TierNo { get; set; }
public virtual ICollection<AdministrativeStructure> AdministrativeStructures { get; set; }
public Country Country { get; set; }
}
我正在使用Entityframework核心1.1.0和MSSQL Server 2016
答案 0 :(得分:2)
让我们看看。如果你创建一个具有这样的属性的类并且不给它任何输入,那么整数将具有以下值:
0
代码:
class Program
{
static void Main(string[] args)
{
tmpClass testClass = new tmpClass();
Debug.WriteLine(testClass.IntTest);
}
public class tmpClass
{
public int IntTest { get; set; }
}
}
你可以看到我没有操纵任何东西。值为零,0
,来自Int的默认值。您说您使用TierID
作为主键值。你的表是否知道如何处理这个问题,比如它会给它一个ID,还是你需要给它一个ID?也许是错误发生的地方。错误的主键。
在您的情况下,似乎数据库生成似乎无法正常工作。
尝试:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TierId { get; set; }