2012-01-06 22 views
6

Başka bir derlemede bir Entity Framework modeliyle karşılaşılan oldukça basit bir veritabanı tabloları kümesine karşı çalışan bir ASP.NET 4 Dinamik Veri web sitem var. Ben EF modelinde tabloları tüm darağacına istemiyoruz, bu yüzden benim Global.asax dosyasında, böyle varsayılan modeli başlatıldı ettik:ASP.NET Dinamik Veriler kısmi meta veriler "buddy" sınıfı görmüyor

DefaultModel.RegisterContext(typeof(MyCompany.MyProject.DataModel.DataContext), new ContextConfiguration() { ScaffoldAllTables = false });

MSDN dokümanlar (ve global.asax dosyasındaki yorumlar, kısmi "dostum" sınıfına [ScaffoldTable(true)] özniteliğini ekleyerek bağımsız tabloların iskeletini seçici olarak etkinleştirebilmem gerektiğini söylüyor. Böyle Bunu yaptıktan:

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.DynamicData; 

namespace MyCompany.MyProject.DataModel 
{ 
    [MetadataType(typeof(InHouseClaimMetadata))] 
    [ScaffoldTable(true)] 
    public partial class InHouseClaim 
    { 
     [DisplayName("In-House Claims")] 
     [TableName("In-House Claims")] 
     public class InHouseClaimMetadata 
     { 
      [DisplayName("Reporting Date")] 
      public object ReportingDate { get; set; } 

      // etc etc... 
     } 
    } 
} 

Ama default.aspx yüklerken, aşağıdaki hata iletisini alabilirsiniz: Hiçbir erişilebilir tablolar vardır

. Global.asax'da en az bir adet veri modeli 'un kayıtlı olduğundan ve iskele etkinleştirildiğinden veya özel sayfalarının uygulandığından emin olun.

Daha önce benzer senaryolarda çalışmak için bunu aldım; Bu girişimden farklı olan tek şey, EF modelimin kendi montajı olması. Global.asax'ı değiştirip tüm tabloları devam ettirmek için değiştirirseniz, iyi çalışır. Ama açıkçası bunu istemiyorum. Kısmi meta veri sınıfının ad alanının EF veri içeriğinin ad alanıyla eşleştiğinden emin olmak için dikkatliyim.

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.DynamicData; 

namespace MyCompany.MyProject.DataModel 
{ 
    [MetadataType(typeof(InHouseClaimMetadata))] 
    [ScaffoldTable(true)] 
    public partial class InHouseClaim 
    { 
     public class InHouseClaimMetadata 
     { 

     } 
    } 
} 

: Ben senin senaryoyu yeniden oluşturmak için çalıştı ve yerine aşağıdaki kodu kullanarak test ettik mülkiyet mappging kullanmanın ettik

+0

Bu adam benim önümdeydi: http://stackoverflow.com/questions/647385/is-it-possible-to- iki-kısmi-sınıfları-farklı-meclis-temsil-var –

cevap

4

Yani, ben bir aptalım: bu bir EF veya Dinamik Veri problemi değil, bir C# kısıtlaması. MSDN kaynaktan:

aynı tip parçalar olması amacıyla tüm kısmi türü tanımları aynı montaj ve aynı modül (.exe veya .dll dosyası) tanımlanmalıdır. Kısmi tanımlar birden çok modüle yayılamıyor. benim için çalıştı Ne

1

Yani stumped ... Bu, EF veri içeriğinin ad alanının kısmi sınıflarınkiyle eşleşmesi durumunda çalışır. Bunları bir sorun olarak ortadan kaldırmak için mülk eşlemelerinizi yorumlayıp yorumlayabilir ve oradan nasıl gittiğinizi görebilir misiniz?

+0

Hayır şans. Ancak cevabınız, sorunu daha net bir şekilde tanımlamak için kodumu asgari asgari senaryoya düşürmemi sağladı. –

1

sayfanıza sağ seçerek, benim kısmi sınıflarını içerir .cs dosyasına tıklayarak ve derleme için Eylem kurmak ayarlayarak, Solution Explorer'da oldu. Herhangi bir nedenle, dosyanın Oluşturma Eylemi varsayılan olarak İçeriğe ayarlandı. (Bunu anlatabilmek için saatlerimi çektim. İnşallah, bu zamandan birini kurtaracak.)

+0

Bu dosyaları _App_Code_ klasöründe oluşturmayın. – ofthelit

İlgili konular