entity key
Varlık anahtarı, kimliği belirlemek için kullanılan varlık türünün bir özelliği veya özellik kümesidir. Varlık anahtarını oluşturan özellikler tasarım zamanında seçilir. Varlık anahtarı özelliklerinin değerleri, çalışma zamanında bir varlık kümesi içindeki varlık türü örneğini benzersiz olarak tanımlamalıdır. Varlık kümesindeki örneklerin benzersizliğini garanti etmek için varlık anahtarını oluşturan özellikler seçilmelidir.
Bir özellik kümesinin varlık anahtarı olması için gereksinimler şunlardır:
Varlık kümesindeki iki varlık anahtarı aynı olamaz. Diğer bir ifadeyle, bir varlık kümesindeki iki varlık için anahtar oluşturan tüm özelliklerin değerleri aynı olamaz. Ancak, bir varlık anahtarını oluşturan değerlerin bazıları (ancak tümü değil) aynı olabilir.
Varlık anahtarı null atanamaz, sabit, temel tür özellikleri kümesinden oluşmalıdır.
Belirli bir varlık türü için varlık anahtarını oluşturan özellikler değiştirilemez. Belirli bir varlık türü için birden fazla olası varlık anahtarına izin veremezsiniz; vekil anahtarları desteklenmez.
Bir varlık devralma hiyerarşisine dahil olduğunda, kök varlığın varlık anahtarını oluşturan tüm özellikleri içermesi ve varlık anahtarının kök varlık türünde tanımlanması gerekir. Daha fazla bilgi için bkz . Varlık Veri Modeli: Devralma.
Örnek
Aşağıdaki diyagramda üç varlık türüne sahip kavramsal bir model gösterilmektedir: Book
, Publisher
ve Author
. Varlık anahtarını oluşturan her varlık türünün özellikleri "(Anahtar)" ile belirtilir. Author
Varlık türünün ve Address
olmak üzere iki özelliğinden Name
oluşan bir varlık anahtarı olduğuna dikkat edin.
ADO.NET Entity Framework, kavramsal modelleri tanımlamak için kavramsal şema tanım dili (CSDL) olarak adlandırılan etki alanına özgü bir dil (DSL) kullanır. Aşağıdaki CSDL, yukarıdaki diyagramda gösterilen varlık türünü tanımlar Book
. Varlık anahtarının varlık türünün özelliğine ISBN
başvurarak tanımlandığını unutmayın.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
ISBN
Uluslararası Standart Kitap Numarası (ISBN) bir kitabı benzersiz olarak tanımladığından, özellik varlık anahtarı için iyi bir seçimdir.
Aşağıdaki CSDL, yukarıdaki diyagramda gösterilen varlık türünü tanımlar Author
. Varlık anahtarının ve Address
iki özelliğinden Name
oluştuğuna dikkat edin.
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
Name
Aynı ada sahip iki yazarın aynı adreste yaşama olasılığı düşük olduğundan varlık anahtarı için ve Address
kullanmak makul bir seçimdir. Ancak, varlık anahtarı için bu seçenek, varlık kümesindeki benzersiz varlık anahtarlarını kesinlikle garanti etmez. Bu durumda, bir yazarı benzersiz olarak tanımlamak için kullanılabilecek gibi AuthorId
bir özellik eklenmesi önerilir.