繁体   English   中英

具有身份的Linq2db插入未按预期工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM