在项目中使用EF6,在添加数据时报"更新条目时出错。有关详细信息,请参阅内部异常。"的错误,查看详细的错误里面提示如下:
InnerException = {"不能将值 NULL 插入列 'ID',表 'FrameDB.dbo.City';列不允许有 Null 值。INSERT 失败。\r\n语句已终止。"}
方法代码:
public int Insert(City city)
{
r model = context.City.Add(city);
context.SaveChanges();
return model.ID;
}
赋值代码:
City city = new City();
city.ID = new Random().Next(1000);
city.CityName = "wuhan";
city.ZipCode = "430010";
CityBLL bll = new CityBLL();
int r= bll.Insert(city);
数据库:(SQL SERVER)
ID int primary key,
CityName nvarchar(50),
ZipCode nvarchar(50)
麻烦大神们帮忙看看具体是什么原因导致的错误,先行谢过!
补充说明:采用的是BD FIRST
错误说的很清楚啊。
看也明白错误的提示,但我添加的对象是有值的,但到数据库就为空,问题主要是在这里
@beggar_: 你跟踪调试一下看看ID的值,是不是你bll里面写了什么?
@xiaocong_soft: 调试看过了,到Add方法返回给result的都有值,是正常的!但savechange就不行
@beggar_: 看看你的代码
ID是主键?没定义默认值吧?如果没定义则需要设置。
问题解决了,主要注意以下几点:
一、数据库表中一定要有主键,否则会报一个更新数据为0行的错
二、数据库的主键如果是int类型的,一定要是自增的,但是设置双主键时,一定要有一个是自增的
三、主键如果是字符串类型的可以在程序中给值
我改了一张表的约束关系然后 重新生成了这张表的实体类型,但是和这张表关联的view 却没有重新生成,所以就报以上错误。重新生成下相关的view 就好了
int类型的也可以设置为主键,也可以不设置为自增长,只要绑定一个默认值((-1))就可以了。