2009-03-04 17 views
6

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the source.ADO.Net Entity Framework birden çok veritabanında,

Bunu Linq 2 Entity/ADO.net Entity Framework'de başarmanın bir yolu var mı? Veritabanı adı bir yere tablo adına eklenebilir mi?

I MyDatabase.dbo için dbo gelen 'şema' değiştirmek çalıştı, ancak EF için 'şema' değiştirme gibi

SELECT FROM [MyDatabase.dbo].[MyTable] 

Trickery içine bu kapsüller 'MyDatabase]. [Dbo'

SELECT FROM [MyDatabase]].[dbo].[MyTable] 

kaçmış olacak

cevap

8
(iki ]]. Zihin)İlk önce, this isn't officially supported.

LINQ to SQL'e bağlandığınız yanıt, yalnızca DB sunucusunun heterojen sorgulama yapma yeteneğini kullanıyor. Bunun neden bir Çerçeve özelliği değil, her iki çerçevenin bir özelliği olduğu için, Entity Framework için neden çalışmadığını anlamıyorum. Başka bir deyişle, LINQ to SQL hala bir veritabanı sunucusuna dahil edilmiş gibi bağlantı ile uğraşıyor. Bununla birlikte, tüm DB sunucularının bunu yapamayacağını unutmayın.

EDMX'te neyin değişeceği konusunda, "SSDL içeriği" bölümündeki EntitySet düğümünün Şema özniteliğine bakın.

Bu teknikle ilgili bir uyarı, modelinizi veritabanından güncelleştirdiğinizde, depolama modelinin silinmesi ve sıfırdan değiştirilmesidir. Yani bu değişiklikleri tekrar uygulamanız gerekecek. Bu LINQ to SQL'de bir sorun değildir, çünkü LINQ to SQL, veritabanından otomatik güncellemeleri desteklemez.

Daha iyi bir alternatif, veritabanında, diğer veritabanına başvuran bir VIEW oluşturmak ve tabloyu ve diğer veritabanını doğrudan eşlemek yerine bu görünümü eşlemek olabilir.

+0

Yalnızca db'nin aynı veritabanı sunucusunda olması durumunda görünüm düzgün çalışır, aksi halde çapraz db'ye gidersiniz. 2005+ SQL'de, bir eşanlamlılığın da işe yarayabileceğine inanıyorum ama% 100 değilim. Kaybedilen değişiklikler ile ilgili olarak, tasarımı kullanmayı bıraktığınızda ve dört dosyanın el ile düzenlenmesini istiyorsanız, bu sorun oluşmasını engeller. – NikolaiDante

+0

Şema özniteliğini dbo'dan, örneğin OtherDatabase.dbo yerine boşuna değiştirmeyi denedim. Bu değişikliklerden sonra sorgular bir istisna 'geçersiz nesne adı OtherDatabase.dbo.MyTable' atar. – Sam

+0

Nath, farklı bir sunucuda bağlantılı bir sunucuyu (EF veya LINQ-to-SQL ile) kullanmanız gerekir. Sam, ardından GÖRÜNÜM yaklaşımını deneyin. –

1

Veritabanınız SQL eşanlamlılarını destekliyorsa, iki veritabanı tanımını bir dosyada birleştirebilirsiniz. Bunu son zamanlarda yaptım ve ilgilendiyseniz, here'u nasıl gönderdiğimi bildirdim.

Temel olarak, veritabanıB'ye işaret eden bir eşanlamlılık oluşturursunuz, her veritabanı için ayrı bir edmx dosyası oluşturun ve sonra edmx dosyalarını tek bir dosyada birleştirmek için bir komut dosyasını çalıştırın.