为了继续使用数据库中的数据,我使用linq2db。
如果该对象有一个对象,则在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 ...
答案 0 :(得分:1)
我怀疑您的ID列已通过IdentityAttribute
属性或ColumnAttribute.IsIdentity = true
标记为身份
它告诉linq2db在使用插入方法插入记录时使用自动生成的值,而没有显式字段设置程序(例如Insert(object)
方法或MergeAPI的InsertWhenNotMatched([predicate])
操作)。
此逻辑不适用于具有显式字段设置器(例如Insert(() => new Record(){Id = explicitValue})
,.Set(() => Id, value).Insert()
或InsertWhenNotMatched(target => new Record(){Id = explicitValue}[, predicate])
)的操作。在这种情况下,因为您明确告诉linq2db要将哪个值插入到身份字段中,它将使用您提供的值。
答案 1 :(得分:0)
我找到了解决方案。如果我只使用db.Insert(Customer)正在使用新ID在数据库中创建一个新实例。但是,如果我这样做:
db.Customers
.Value(p => p.Name, Customer.Name)
.Value(p => p.Id, Customer.Id)
.Insert();
这是在数据库中插入前面设置了id的实例。
对于那些遇到同样问题的人来说,祝你好运:)
答案 2 :(得分:-1)
请尝试使用此代码:
using (dbFoodBlogEntities db = new dbFoodBlogEntities())
{
db.tblBloggers.AddObject(objtblBlogger);
db.SaveChanges();
}