如何保存新记录

时间:2017-01-17 20:12:47

标签: c# .net database entity-framework

我正在处理一个传递给我的现有项目。它使用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值的对象无法附加到对象上下文”

2 个答案:

答案 0 :(得分:0)

尝试此操作,在paymentLog对象上设置值后添加:

context.PaymentLog.Add(paymentLog);
context.SaveChanges();

答案 1 :(得分:0)

这个错误已经告诉你了解了什么:

  

只有在属性的当前值为null时才能设置EntityKey属性

" EntityKey属性"指代表示表的键的属性。在您的情况下,它可能是Guid属性。请注意,在您的代码中,您在添加/附加实体之前设置该属性。通常,密钥会由您的数据存储生成,而您自己也无法提供该值。

我想如果您删除以下行:

paymentLog.Guid = Guid.NewGuid();

尝试添加/附加,它应该可以工作。