2011-12-17 7 views
10

Entity Framework, İlk Kod'u kullanıyoruz ve veritabanımızda aynı adı taşıyan fakat farklı Şemalarda bulunan birkaç tablomuz var.EF Kodu ilk olarak, aynı tablo adını farklı şemaya nasıl kaydedebilirsiniz?

Modelleri iki farklı ad alanına da yerleştirdim.

Bu tabloları DbContext sınıfımda nasıl kaydedebilirim?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Data.Schema1.Contact>().ToTable("Contact", "schema1"); 
    modelBuilder.Entity<Data.Schema2.Contact>().ToTable("Contact", "schema2"); 
} 

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

15

Sınıflarınız farklı bir ada sahip olmalı veya her bir şema için ayrı bir bağlam kullanmalısınız.

Bunun nedeni, dahili olarak kullanılan EDM modelidir. İlk önce kod kullanıyor olsanız bile, hala arka planda EDM modeli oluşturur ve tüm kısıtlamalarını ve POCO sınıflarının CSDL modelinde tanımlanan varlıklar ile nasıl eşleştiğini izlemelidir. EDM'den gelen varlıklar ve POCO sınıfları sınıf adına göre (isim alanları olmadan) eşleştirilir. Bu nedenle, aynı bağlamda eşlenen her sınıf adı benzersiz olmalı ve farklı ad alanı, farklı sınıf adı yapmaz.

+0

Sorun şu ki, iki farklı bağlam sınıfında sınıfları koyarsam, artık iki tabloya katılamıyorum .... Bundan kurtulmanın bir yolu var mı? Context.Contacts.Include ("Contacts2"); Temas2 farklı bir bağlamdadır. – sam360

+0

Hayır Çapraz bağlam sorguları yapamazsınız. Böylece sizin için tek seçenek, sınıflarınız için farklı isimler kullanmaktır - aynı yöntemde her iki türle de çalışmanız gerektiğinde kodunuzu daha okunabilir hale getirecektir. –

+1

Farklı bir sınıf adı kullanırsam ve ikisini de aynı bağlamda eklerseniz, EF bana bir hata verir: – sam360

İlgili konular