就是增加用户,用户表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返回数据库里的最新值。
你手动维护一个主键是很麻烦的事。不建议做
------解决方案--------------------
任何业务上的需要的所谓“编号”都不要做主键
------解决方案--------------------
你检查下生成的sql语句
一般EF的主键都是系统自动生成的。可能忽略掉了你的显式赋值。
其实一般的套路是主键自增长,然后EF保存时会自动给UID返回数据库里的最新值。
你手动维护一个主键是很麻烦的事。不建议做
但有些主键需要的是自己输入,而不是自动增长,前面我开始用的主键是自动增长,运行然后没有错。后面基于需要,就去掉了主键自动增长,然后运行就报这样的错。如果是EF忽略掉了显示赋值,那怎么做让它不忽略呢?
任何业务上的需要的所谓“编号”都不要做主键
恩,但问题是做了主键后,该怎么解决呢?
去改dataadapter的insertcommand的sql文和param
这个不是很明白,我用的entityframework,它的插入操作是:
1 EducationEntitiesmode ef = new EducationEntitiesmode();//实例化上下文
2
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语句有问题