3

为了继续使用数据库中的数据在应用程序中工作,我使用的是 linq2db。

如果对象有 ID,则在 DB 中插入对象应插入 WITH ID,​​如果没有身份,则在 DB 中为该对象创建新 ID。
但就目前而言,这种方法在两种情况下都插入了新的 id。

我可以给你举个例子:

using(var db = new EIDB())
{
  Customer.Id=20;
  Customer.Name="Greg";
  db.Insert(Customer);
}

插入后,我们在 DB 中有这个名为“Greg”且 ID=1 的客户...

***有没有办法做类似的事情,但插入之前设置的相同 ID(在我们的示例中 = 20)?

PS:如果我使用 NpgsqlCommand 并插入相同的数据,则插入 ID=20...

4

3 回答 3

4

我找到了解决方案。如果我只使用 db.Insert(Customer) 正在使用新 ID 在数据库中创建一个新实例。但是,如果我这样做:

db.Customers
  .Value(p => p.Name, Customer.Name)
  .Value(p => p.Id, Customer.Id)
  .Insert();

这是在数据库中插入之前设置了 id 的实例。

祝那些有同样问题的人好运:)

于 2018-02-14T15:49:10.323 回答
3

我怀疑您将 Id 列标记为按IdentityAttribute属性标识或ColumnAttribute.IsIdentity = true

它告诉 linq2db 在使用插入方法插入记录时使用自动生成的值,而无需像Insert(object)方法或 MergeAPIInsertWhenNotMatched([predicate])操作这样的显式字段设置器。

此逻辑不适用于具有显式字段设置器(如Insert(() => new Record(){Id = explicitValue}).Value(() => Id, value).Insert()或 )的操作InsertWhenNotMatched(target => new Record(){Id = explicitValue}[, predicate])。在这些情况下,因为您明确告诉 linq2db 要将哪个值插入标识字段 - 它将使用您提供的值。

于 2018-11-16T10:19:44.183 回答
-2

请尝试使用此代码:

using (dbFoodBlogEntities db = new dbFoodBlogEntities())
{
    db.tblBloggers.AddObject(objtblBlogger);
    db.SaveChanges();
}
于 2018-02-14T19:54:59.850 回答