EF4を使用しています。新しいMyObjectをデータベースに挿入したいと思います。MyObjectには2つのフィールドがあります。
Id:int(Identity)およびName:string
ドキュメントで見たように、Entity Frameworkは、MyObject.IdをSaveChanges()の呼び出し後にデータベースによって生成された値に設定することになっていますが、私の場合はそうなりません。
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
}
アップデート:
これは私のエンティティの1つで発生し、他のエンティティは正常に機能します。ちなみに、確認したところ、DB列はIDで、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>
更新はデータベースで正常に実行され、IDは生成されますが、エンティティオブジェクトは新しいIDで更新されません。