Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 实体框架SaveChanges-如何在插入时忽略ID/Identity字段_Vb.net_Entity Framework_Linq To Entities_Identity_Xtragrid - Fatal编程技术网

Vb.net 实体框架SaveChanges-如何在插入时忽略ID/Identity字段

Vb.net 实体框架SaveChanges-如何在插入时忽略ID/Identity字段,vb.net,entity-framework,linq-to-entities,identity,xtragrid,Vb.net,Entity Framework,Linq To Entities,Identity,Xtragrid,VB.NET4 WinForms应用程序 我有一个(DevExpress)网格绑定到(MyClass的)IEnumerable。 每当添加新行时,ID默认为零(0)。在尝试保存更改时,EntityFramework没有意识到作为标识字段意味着它应该忽略insert上的任何内容,而只插入其他值。我不能指定null/Nothing,因为它只是将ID保持为零 我可以手动添加和保存MyClass的实例,但我正在尝试让它在网格处理添加/初始化/etc新条目的地方工作。据我所知,问题不在于网格,而在于实体框

VB.NET4 WinForms应用程序

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

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

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

任何帮助我避免将笔记本电脑扔出窗外的行为都将不胜感激

如果实体的属性是数据库中的
标识(自动递增值),则在实体模型的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语句中为列发出一个值


(请确保确实检查了edmx文件中的
edmx:StorageModels
部分。
edmx:ConceptualModels
部分在属性中也有一个属性
annotation:StoreGeneratedPattern
,但其设置与您的特定问题无关。(我认为这只在从模型创建数据库时才重要,但我不确定。)

如果实体的属性是
标识(自动递增值)在实体模型的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语句中为列发出一个值


(请确保确实检查了edmx文件中的
edmx:StorageModels
部分。
edmx:ConceptualModels
部分在属性中也有一个属性
annotation:StoreGeneratedPattern
,但其设置与您的特定问题无关。(我认为这只在从模型创建数据库时才重要,但我不确定。)

似乎您的DB表没有标识。似乎您的DB表没有标识。奇怪的是,其他实体在EDMX中指定了SGP,在设计器中它们都有相同的设置(实体键、标识等)但只有该类缺少StoreGeneratedPattern=“Identity”在EntityType部分。到目前为止调用的XML编辑量非常令人沮丧…但是非常感谢您回答了MSDN和一些知名的ORM和.NET博客作者所不能回答的问题!我想知道如果数据库中的列是一个标识,怎么会缺少此设置。您可能稍后更改了该列吗(首次创建模型后)从DB表中的非标识列到标识列,忘记从数据库更新模型?但老实说,我甚至不确定它是否真的会自动更新。这是需要测试的东西。奇怪的是,其他实体在EDMX中指定了SGP,在设计器中它们都有相同的设置(实体键、标识等)但只有该类缺少StoreGeneratedPattern=“Identity”在EntityType部分。到目前为止调用的XML编辑量非常令人沮丧…但是非常感谢您回答了MSDN和一些知名的ORM和.NET博客作者所不能回答的问题!我想知道如果数据库中的列是一个标识,怎么会缺少此设置。您可能稍后更改了该列吗(在您第一次创建模型后)从DB表中的非标识列更改为标识列,并忘记从数据库更新您的模型?但老实说,我甚至不确定它是否真的会自动更新。这是需要测试的东西。