我正在处理一个传递给我的现有项目。它使用EF5。我在数据库中创建了一个新表,并尝试向该表添加一行。我习惯使用DBContext,但在这种情况下,现有代码似乎使用ObjectContext。
我试图在数据库中创建一个新行,但这不起作用:
using (var context = new MyDatabaseEntities())
{
var paymentLog = context.PaymentLog.CreateObject();
paymentLog.Guid = Guid.NewGuid();
paymentLog.ErrorCode = errorCode.ToString();
paymentLog.ErrorMessage = message;
paymentLog.Timestamp = DateTime.Now;
context.SaveChanges();
}
就像那样,数据库自然没有变化。当我添加以下行context.PaymentLog.AddObject(paymentLog);
时,我收到一条错误消息“只有在属性的当前值为null时才能设置EntityKey属性。”
此外,当我尝试附加类似于DBContext工作方式的实体时,我也会遇到类似的错误。
我做错了吗?
编辑:我也尝试了以下内容:
context.PaymentLog.Attach(paymentLog);
context.ObjectStateManager.ChangeObjectState(paymentLog, System.Data.EntityState.Added);
context.SaveChanges();
这会产生此错误:“具有临时EntityKey值的对象无法附加到对象上下文”
答案 0 :(得分:0)
尝试此操作,在paymentLog对象上设置值后添加:
context.PaymentLog.Add(paymentLog);
context.SaveChanges();
答案 1 :(得分:0)
这个错误已经告诉你了解了什么:
只有在属性的当前值为null时才能设置EntityKey属性
" EntityKey属性"指代表示表的键的属性。在您的情况下,它可能是Guid
属性。请注意,在您的代码中,您在添加/附加实体之前设置该属性。通常,密钥会由您的数据存储生成,而您自己也无法提供该值。
我想如果您删除以下行:
paymentLog.Guid = Guid.NewGuid();
尝试添加/附加,它应该可以工作。