我有一个具有Identity列的表,另一列需要根据计算出的identity列获取其值。
我的EF代码如下所示:
var context = new DBEntities();
var newTableRow = new TableRow();
newTableRow.Column1 = newTableRow.ComputedColumn;
context.TableRows.Add(newTableRow);
context.SaveChanges();
如果ComputedColumn是一个IDENTITY而Column1是一个可以为空的varchar(50),我希望Column1的值与ComputedColumn相同,但它是null。 我甚至试过这个:
var context = new DBEntities();
var newTableRow = new TableRow();
context.TableRows.Add(newTableRow);
context.SaveChanges();
newTableRow.Column1 = newTableRow.ComputedColumn;
context.SaveChanges();
和
var context = new DBEntities();
var newTableRow = new TableRow();
context.TableRows.Add(newTableRow);
context.SaveChanges();
var getTableRow = context.TableRows.Single(r => r.ComputedColumn == newTableRow.ComputedColumn);
getTableRow.Column1 = newTableRow.ComputedColumn.ToString();
context.SaveChanges();
请记住,这是较大交易的一部分。我不想做的是完成事务,然后在另一个事务中做另一次更新。我想在一次交易中保留所有内容。这之前一直在插入过程中。
谢谢,
布雷特
答案 0 :(得分:0)
如果ComputedColumn
有DatabaseGeneratedOption.Identity
,那么您的第二个例子应该有效。但他们有单独的交易,你不需要。
你的第一个例子不起作用。当列具有DatabaseGeneratedOption.Identity
时,EF会在执行SaveChanges
时读取标识值。它不知道您可能尝试用
newTableRow.Column1 = newTableRow.ComputedColumn;
至于EF,它只是一个空值的赋值。
也许最好的选择是在数据库表中添加computed column。你将一石二鸟:
答案 1 :(得分:0)
我刚刚审核了模型,你说得对,我没有注意到。 Column1已设置为计算值。删除该值应该可以解决问题。