nim*_*ima 10 entity-framework identity-column
我正在使用EF4.我想在数据库中插入一个新的MyObject.MyObject有两个字段:
Id:int(Identity)和Name:string
正如我在文档中看到的,实体框架应该在调用SaveChanges()之后将MyObject.Id设置为数据库生成的值,但在我的情况下不会发生.
using (var context = new MyEntities())
{
var myObject = MyObjects.CreateMyObject(0, "something"); // The first parameter is identity "Id"
context.MyObjects.AddObject(myObject);
context.SaveChanges();
return myObject.Id; // The returned value is 0
}
Run Code Online (Sandbox Code Playgroud)
更新:
这发生在我的一个实体中,其他工作正常.顺便说一句,我检查了DB列是标识,StoreGeneratedPattern设置为Identity.这是SSDL.我没有看到任何区别.第一个不正常:
<EntityType Name="OrgUnit">
<Key>
<PropertyRef Name="Srl" />
</Key>
<Property Name="Srl" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="TypeId" Type="smallint" Nullable="false" />
<Property Name="Name" Type="varchar" Nullable="false" MaxLength="80" />
</EntityType>
<EntityType Name="OrgType">
<Key>
<PropertyRef Name="Srl" />
</Key>
<Property Name="Srl" Type="smallint" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="Title" Type="varchar" Nullable="false" MaxLength="120" />
<Property Name="Options" Type="int" Nullable="false" />
</EntityType>
Run Code Online (Sandbox Code Playgroud)
更新在数据库中成功完成,并生成标识但实体对象未使用新标识更新.
小智 6
如果您正在使用Oracle Entity Framework 4 Provider,就像我一样,从ODP.NET,Designer中存在一个错误.只需在下拉框中选择"身份"值即可.它将在概念模型中注释概念属性
注释:StoreGeneratedPattern = "身份"
像
<Property Type="Int32" Name="Id" Nullable="false" cg:SetterAccess="Private" annotation:StoreGeneratedPattern="Identity" />
Run Code Online (Sandbox Code Playgroud)
但是,对于存储模型,它将无法做同样的事情,即.你需要手动完成.在感兴趣的EntityType中找到属性(在我的案例ID中)并添加StoreGeneratedPattern ="Identity".
<EntityType Name="PROBLEMI">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="number" Nullable="false" Precision="10" StoreGeneratedPattern="Identity" />
Run Code Online (Sandbox Code Playgroud)
我不知道SQL EF提供程序中的相同错误'因为我没有使用它.