【问题标题】:How to save a new record如何保存新记录
【发布时间】:2017-01-17 20:12:47
【问题描述】:

我正在处理一个已移交给我的现有项目。它使用 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); 时,我收到一条错误消息“EntityKey 属性只能在属性的当前值为 null 时设置”。

另外,当我尝试附加类似于 DBContext 工作方式的实体时,我也会收到类似的错误。

我做错了吗?

编辑:我还尝试了以下方法:

context.PaymentLog.Attach(paymentLog);
context.ObjectStateManager.ChangeObjectState(paymentLog, System.Data.EntityState.Added);
context.SaveChanges();

这会产生此错误:“具有临时 EntityKey 值的对象无法附加到对象上下文”

【问题讨论】:

    标签: c# .net database entity-framework


    【解决方案1】:

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

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

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

    我想如果你删除以下行:

    paymentLog.Guid = Guid.NewGuid();
    

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

    【讨论】:

    • 我按照你说的做了,但现在在 Attach 上出现以下错误:“具有临时 EntityKey 值的对象无法附加到对象上下文。” (同样的错误)
    • AddObject 怎么样?
    • 也试过了,并结合上面的答案。没有运气
    • 我会使用该错误消息的文本进行网络搜索,看看还会出现什么。这就是我目前能给你的所有建议。
    【解决方案2】:

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

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

    【讨论】:

    • 使用附加命令时,出现以下错误:“无法将具有临时 EntityKey 值的对象附加到对象上下文”
    • 检查 Mike McCaughans 的答案并结合我的.. 你应该让实体框架处理主键
    • 我有点累了,我现在稍微改变了我的答案.. 再次添加 Guid,然后更改附加和其他位
    • “添加”方法似乎不存在。我改用了“AddObject”,但遇到了同样的问题。
    • 我在这里不知所措..您使用的是哪个版本的 VS、MVC、EF 和 .NET?在我看来,这听起来像是某种错误或旧版本的 EF。
    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多