Ben EntityFramework 5 kullanıyorum ben zaten doğru DbSets belirledik ve nesneleri birbirine uygun referanslar içerebilir. Bu benim için yeni değil ve işler iyi çalışıyor. EntityFramework anonim kompozit anahtar özellik adı çakışması
Şimdi bu durumda ben, bazen, (bu durumda veya nesneyi) yabancı bir tablonun anahtarı içeren bazı kompozit tuşları var. Bunun için DbContext'inOnModelCreating
yöntemindeki
HasKey<>()
işlevini kullanıyorum. Bu özellikler farklı adlara sahip olduğunda sorun yoktur, ancak bu özellikler aynı ada sahip olduğunda, taşıma yapılamaz.
Bir örnek: Verilen kodda görebileceğiniz gibi
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Entity<PatientVisit>().ToTable("PatientVisits");
modelBuilder.Entity<PatientVisit>().HasKey(x =>
new { x.Patient.Code, x.Code });
// ...
base.OnModelCreating(modelBuilder);
}
, nesne PatientVisit Kod adlı bir özelliği vardır, ancak bu özellik sürece farklı bir hasta ile tekrarlanır olarak tekrarlanabilir. Varlık Hastasında ayrıca bir Kod adlı tanımlanmış bir anahtar bulunur.
Anonim türü aynı adı (bariz) çıkarım iki özelliklere sahip olamaz. Tipik çözüm böyle anonim türünün özelliklerini isim olacaktır:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Entity<PatientVisit>().ToTable("PatientVisits");
modelBuilder.Entity<PatientVisit>().HasKey(x =>
new { PatientCode = x.Patient.Code, VisitCode = x.Code });
// ...
base.OnModelCreating(modelBuilder);
}
Ama bunu yaparken, bu hata mesajı fırladığı bir göç eklemeyi deneyin.
The properties expression 'x => new <>f__AnonymousType3`2(PatientCode
= x.Patient.Code, VisitCode = x.Code)' is not valid. The expression
should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t)
t.MyProperty'. When specifying multiple properties use an anonymous
type: C#: 't => new { t.MyProperty1, t.MyProperty2 }'
VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.
bana başvurulan nesnelerin elle Keys ve kimlikleri eklemek gerektiren çözümler olduğunu biliyorum yapabiliriz, ama bu bir veritabanına basit nesne modeli "değişen" ima -mapping modeli ve bunu yapmamayı tercih ederim. –
Çözümünüz, uyguladığım yönteme benzer, yalnızca Veri Eşlemeleri tarafından yapıldığı için akıcı bir eşleme gerekmez. Temel olarak, bir sanal gezinme özelliğinin yabancı anahtarına bildirilen bir özelliği eklemek için 'ForeignKey 'özniteliğini kullanıyor ... ancak yine de, _ __ anchor veya anatman özelliklerinin gezinme özelliklerini açıkça tanımlaması gerektiğini ima eder. Veritabanı ile ilgili anahtar özellikler olmadan temiz, temiz bir nesne modeline sahip olmak isterim. –
Sözünü ettiğim _current-ama-want-want_ çözümünün bir örneği için, bkz. [Bu konu] (http://stackoverflow.com/questions/5388077/primary-foreign-key-in-entity-framework) Çok iyi açıklandığı yer. –