实体框架 - "更新条目时发生错误.有关详细信息,请参阅内部异常"

CSh*_*ner 11 c# entity-framework ef-model-first

我有问题,我刚开始学习EF Model First并且我在一段时间内待在一个点上.我有这样的错误:

"更新条目时发生错误.有关详细信息,请参阅内部异常"

我在图上创建了一个简单的模型,生成了数据库并在C#中编写了简单的代码,只在表中添加了一行,但错误一直出现.

我发布了截图与图/生成的DLL /简单主/错误抛出

模特和东西

更大尺寸的链接:http://i.imgur.com/bKGc4wv.png

Joã*_*nho 12

转动Pluralization On.问题是,你的模型对象是使用奇异的名字(Pupil)约定,而在你的数据库使用的是多元化的名字Pupilss.

UPDATE

这篇文章展示了如何打开或关闭它.该帖子的一些相关摘录:

打开和关闭多元化

  • 在"工具"菜单上,单击"选项".

  • 在"选项"对话框中,展开"数据库工具".注意:如果"数据库工具"节点不可见,请选择"显示所有设置".

  • 单击O/R设计器.

  • 将名称的多个化设置为Enabled = False以设置O/R设计器,以便它不会更改类名.

  • 将多个名称设置为Enabled = True可将复数规则应用于添加到O/R设计器的对象的类名.

更新2

但请注意,您应该避免使用复数名称.你可以在这里阅读如何做到(我会在这里引用它,以防链接被破坏).

(...)使用Entity Framework Code First方法时,您将从模型类创建数据库表.通常,Entity Framework将创建具有多个名称的表.这意味着如果你有一个名为PhoneNumber的模型类,Entity框架将为这个类创建一个名为"PhoneNumbers"的表.如果你想避免复数名称并希望像Customer这样的单数名称,你可以这样做在你的DBContext类中,覆盖像这样的"OnModelCreating"方法(...)

在此输入图像描述

(...)使用此方法覆盖将避免创建具有多个名称的表.现在它将创建一个名为"PhoneNumber"的表,而不是"PhoneNumbers" (...)

  • 不幸的是,我启用了复数,所以这不是问题:/ (2认同)

And*_*rew 8

查看异常的内部异常以获得更具体的错误信息。

查看内部异常的一种方法是捕获异常,并在其上放置一个断点。然后在 Locals 窗口中:选择 Exception 变量 > InnerException > Message

和/或只是写到控制台:

    catch (Exception e)
    {
        Console.WriteLine(e.InnerException.Message);
    }
Run Code Online (Sandbox Code Playgroud)


FAR*_*SAR 7

它可能是从.net到sql的数据转换的原因.例如datetime转换错误.

根本不是一个确切的错误.您可以在exception.InnerException.InnerException - > ResultView中查看watch中的确切错误.

对我来说,它是对datetime列的null引用

  • 寻找“InnerException”的有用建议,得到了确切的消息:**_实体名称不匹配_**。数据库中的表名称和定义的实体名称不同 (3认同)