如何保存新记录



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

该错误已经告诉您发生了什么:

仅当属性的当前值为 null 时,才能设置 EntityKey 属性

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

我认为如果您删除以下行:

paymentLog.Guid = Guid.NewGuid();

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

试试这个,在 paymentLog 对象上设置值后添加:

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

最新更新