使用linq表达式,获取sqlserver自增主键获取不到。求解
c#吧
全部回复
仅看楼主
level 1
表 tab1,tab2.
方法A传入a,b两个参数
a=1;b=2;
入库保存
using(var db=new tabdb()){
var tab1info=new tab1{
t1=1;
t2=2
};
db.tab1.Add(tabinfo);
db.SaveChanges();
var result=db.tab2.FirstOrDefault(x=>x.t1==a&&x.t2==b);
}
//这里尝试写日志输出显示有值不为空,但是获取tab1的主键时(主键数据库设置为自增)主键为0,多次尝试获取都为0.
//而且尝试把自增列改为不使用自增,自己给值入库。使用获取tab1已有的数据最大值+1进行入库操作,
var count=db.tab1.Count();
var tb2id=count+1;
var tab2info=new tab2{
id=tb2id,
t1=a,
t2=b
};
db.tab2.Add(tab2info);
db.SaveChanges();
//此时入库则显示ID为空。由于数据库设置不为空所以导致直接报错。写日志进行输出是有值的
备注:在本地测试正常,部署两台服务器也运行几个月都没有事。前几天部署新的服务器时出现此问题,中间唯一有影响的就是加了几个外键但是已被我删除。
[乖][泪][喷]
重现问题都不知道怎么重现,直接原版本拿到内部测试服务器测试。啥事没有。。。。求指教!!!!!
2018年06月19日 09点06分 1
level 12
var result=db.tab2.FirstOrDefault(x=>x.t1==a&&x.t2==b);
result的主键为0?
不应该啊,你这样还能插入到数据库吗?这不科学。
具体报错贴出来。
2018年06月19日 09点06分 2
擦嘞。写错了,应该是tab2那个在根据条件获取tab1的主键入库为0导致后续数据有问题。然后tab1主键设置为了不自增,获取tab1的最大数量+1入库然后给tab2也入库,结果入库报错。因为提示为空。。。。 这边没有具体报错提示,因为本地无法重现,只是写了日志进行输出相应参数。
2018年06月19日 10点06分
最关键我把出错版本拷贝到内部测试服务器没有任何问题,出了数据库可能存在不一样,但是我后续把两边的外键都删了,保持一致。。。
2018年06月19日 10点06分
而且不知道是不是因为环境问题,还有一个是图片数据上传 本地测试和内部服务器测试使用ajaxSubmit进行图片上传没有问题,扔到那个新的上面就会报400。。。同样的代码。。。[狂汗][泪]
2018年06月19日 10点06分
@厉害厉害🐼 你的tab1和tab2模型没有关联吧。
2018年06月20日 01点06分
1