当前位置: 代码迷 >> .NET Framework >> 不能将值 NULL 插入列 'U_ID'表 'OA.dbo.Table_UserInfo'列不允许有 Null 值。INSERT 失败。 语句已终止解决方法
  详细解决方案

不能将值 NULL 插入列 'U_ID'表 'OA.dbo.Table_UserInfo'列不允许有 Null 值。INSERT 失败。 语句已终止解决方法

热度:448   发布时间:2016-05-01 23:34:18.0
不能将值 NULL 插入列 'U_ID',表 'OA.dbo.Table_UserInfo';列不允许有 Null 值。INSERT 失败。 语句已终止
       就是增加用户,用户表U_ID是主键,不允许空。
下面明明给U_ID赋值了,却还是出错,显示:
不能将值 NULL 插入列 'U_ID',表 'OA.dbo.Table_UserInfo';列不允许有 Null 值。INSERT 失败。 语句已终止

下面是部分代码:
 Table_UserInfo user = new Table_UserInfo();
            user.U_ID = 123;
             user.......//user的其他属性赋值;
            oa.Table_UserInfo.Add(user);
            oa.SaveChanges();
怎么回事啊,求解,谢谢!
------解决方案--------------------
你检查下生成的sql语句
一般EF的主键都是系统自动生成的。可能忽略掉了你的显式赋值。

其实一般的套路是主键自增长,然后EF保存时会自动给UID返回数据库里的最新值。

你手动维护一个主键是很麻烦的事。不建议做
------解决方案--------------------
引用:
Quote: 引用:

你检查下生成的sql语句
一般EF的主键都是系统自动生成的。可能忽略掉了你的显式赋值。

其实一般的套路是主键自增长,然后EF保存时会自动给UID返回数据库里的最新值。

你手动维护一个主键是很麻烦的事。不建议做

但有些主键需要的是自己输入,而不是自动增长,前面我开始用的主键是自动增长,运行然后没有错。后面基于需要,就去掉了主键自动增长,然后运行就报这样的错。如果是EF忽略掉了显示赋值,那怎么做让它不忽略呢?

任何业务上的需要的所谓“编号”都不要做主键
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

你检查下生成的sql语句
一般EF的主键都是系统自动生成的。可能忽略掉了你的显式赋值。

其实一般的套路是主键自增长,然后EF保存时会自动给UID返回数据库里的最新值。

你手动维护一个主键是很麻烦的事。不建议做

但有些主键需要的是自己输入,而不是自动增长,前面我开始用的主键是自动增长,运行然后没有错。后面基于需要,就去掉了主键自动增长,然后运行就报这样的错。如果是EF忽略掉了显示赋值,那怎么做让它不忽略呢?

任何业务上的需要的所谓“编号”都不要做主键


恩,但问题是做了主键后,该怎么解决呢?

去改dataadapter的insertcommand的sql文和param


这个不是很明白,我用的entityframework,它的插入操作是:
1 EducationEntitiesmode ef = new EducationEntitiesmode();//实例化上下文 

3 banji bj = new banji();//实例化实体类 
4 bj.ID = 123; 
5 bj.Number = 124;//给实体类的每个字段赋值 
6 ef.Class集.Add(bj);//将实体类实例化的对象附加到相应的实体集中 
7 ef.SaveChanges();
没看到有你说的什么dataadapter的insertcommand的sql文和param。
偶是菜鸟级别的,还望理解,

EducationEntitiesmode是个什么东东?自定义的类?
继承哪个类,SaveChanges()方法里面怎么实现的?
------解决方案--------------------
如果数据库有改动,自增长的键值改为非自增长了,你有没有更新Entities 设计?
代码没什么问题,应该是某些地方不匹配导致的生成的sql语句有问题
  相关解决方案