1

VB .NET 4 WinForms 应用程序。

我有一个绑定到 IEnumerable(Of MyClass) 的 (DevExpress) 网格。每当添加新行时,ID 默认为零 (0)。在尝试 SaveChanges 时,EntityFramework 没有意识到作为一个身份字段意味着它应该忽略插入时的任何内容,而只插入其他值。我不能指定 null / Nothing,因为它只是将 ID 保持为零。

我可以手动添加和保存 MyClass 的实例,但我试图让它在网格处理添加/初始化/等新条目的地方工作。据我所知,问题不在于网格,而在于实体框架以及生成的 SQL 和实体类。

{"Cannot insert explicit value for identity column in table 'MyClasses' when IDENTITY_INSERT is set to OFF."}

任何防止我将笔记本电脑扔出窗外的帮助将不胜感激!

4

1 回答 1

4

如果实体的属性是Identity数据库中的(自动递增值),则在实体模型的 StorageModel 中指定。也许此设置不适合您的特定领域。您可以通过打开模型的 edmx 文件并查看该StorageModels部分来检查这一点。它应该如下所示:

<edmx:StorageModels>
  ...
  <EntityType Name="MyClass">
    <Key>
      <PropertyRef Name="ID" />
    </Key>
    <Property Name="ID" Type="..." Nullable="..." StoreGeneratedPattern="Identity" />
    ...
  </EntityType>
  ...
</edmx:StorageModels>

StoreGeneratedPattern必须设置为Identity。如果存在None或缺少该属性(默认为None),您确实会得到您描述的错误,因为 EntityFramework 在这种情况下不知道这ID是一个身份,并且会在生成的 SQL-INSERT 语句中为该列发出一个值。

(Make sure you are really checking the edmx:StorageModels section in the edmx file. The edmx:ConceptualModels section has an attribute annotation:StoreGeneratedPattern in the property as well but its setting doesn't matter for your specific problem. (I think that's only important when a database gets created from a model, but I'm not sure.))

于 2010-06-20T16:10:10.293 回答