[英]Linq2db insertion with identity not working as expected
为了继续使用数据库中的数据处理应用程序,我使用了linq2db。
如果在数据库中插入一个对象,则该对象将插入WITH ID;如果该对象具有一个ID,则在数据库中为此对象创建新的ID。
但是目前,这两种方法都将插入新的id。
我可以举一个例子:
using(var db = new EIDB())
{
Customer.Id=20;
Customer.Name="Greg";
db.Insert(Customer);
}
插入后,我们在数据库中有该客户,名称为“ Greg”,ID = 1。
***是否有办法做类似的事情,但要插入之前设置的相同ID(在我们的示例中为20)?
PS:如果我使用NpgsqlCommand并插入相同的数据,则插入ID = 20 ...
我怀疑您已通过IdentityAttribute
属性或ColumnAttribute.IsIdentity = true
将Id列标记为身份
它告诉linq2db在使用插入方法插入记录时使用自动生成的值,而没有诸如Insert(object)
方法或MergeAPI的InsertWhenNotMatched([predicate])
操作之类的显式字段设置器。
此逻辑不适用于具有显式字段设置器的操作,例如Insert(() => new Record(){Id = explicitValue})
.Set(() => Id, value).Insert()
或InsertWhenNotMatched(target => new Record(){Id = explicitValue}[, predicate])
。 在这些情况下,因为您明确告诉linq2db哪个值要插入到身份字段中-它会使用您提供的值。
我找到了解决方案。 如果我只使用db.Insert(Customer),则在数据库中使用新ID创建新实例。 但是,如果我这样做:
db.Customers
.Value(p => p.Name, Customer.Name)
.Value(p => p.Id, Customer.Id)
.Insert();
这是在数据库中插入之前设置了ID的实例。
对于那些遇到同样问题的人也祝好运:)
请尝试使用以下代码:
using (dbFoodBlogEntities db = new dbFoodBlogEntities())
{
db.tblBloggers.AddObject(objtblBlogger);
db.SaveChanges();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.