2012-01-06 24 views
6

我有一個ASP.NET 4動態數據網站,它針對一組非常簡單的數據庫表運行,並通過另一個程序集中的實體框架模型公開。我不想腳手架在EF模型中的表所有,所以在我的Global.asax文件,我已經初始化的默認模式是這樣的:ASP.NET動態數據沒有看到部分元數據「夥伴」類

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

MSDN文檔(和global.asax文件中的註釋)表示,我現在應該可以通過將[ScaffoldTable(true)]屬性添加到其部分「夥伴」類來選擇性地啓用單個表的腳手架。我這樣做是這樣的:

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... 
     } 
    } 
} 

但加載Default.aspx的時候,我得到了以下錯誤消息:

有沒有訪問表。確保在Global.asax中註冊了至少一個數據模型 ,並且啓用了腳手架或實現了 自定義頁面。

我已經得到了這個在類似的情況下工作;這個嘗試的另一個不同就是我的EF模型是它自己的組合。如果我更改global.asax繼續前進並搭建所有表格,它就可以正常工作。但顯然,我不想要那樣。我小心地確保部分元數據類的名稱空間與EF數據上下文的名稱空間匹配。

所以我很爲難......

+0

這傢伙遠遠超過了我:http://stackoverflow.com/questions/647385/is-it-possible-to-有兩個部分類在不同的程序集代表 – 2012-01-09 16:09:15

回答

4

所以,我是一個白癡:這不是一個EF或動態數據問題,它是一個C#約束。從MSDN

意味着是同一類型的所有份偏型定義必須 在相同的組件和同一模塊(.exe或.dll文件 )來定義。 部分定義不能跨越多個模塊。

1

我試着重新創建您的方案,並代替使用屬性mappging我測試過使用下面的代碼:

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 
     { 

     } 
    } 
} 

如果EF數據上下文的名稱空間與部分類的名稱空間匹配,這將起作用。你可以嘗試並註釋掉你的屬性映射來消除這些問題,並看看你從那裏走了嗎?

+0

沒有運氣。但是你的回答讓我將代碼剝離到最低限度的情況下,以便更清楚地發現問題。 – 2012-01-09 15:59:36

1

什麼工作對我來說是,在Solution Explorer中,用鼠標右鍵單擊包含我的部分類,選擇屬性,在cs文件,並設置生成操作進行編譯。無論出於何種原因,默認情況下文件的構建操作都設置爲「內容」。 (花了我幾個小時才弄明白這個,希望這會幫助別人節省時間。)

+0

不要在_App_Code_文件夾中創建這些文件。 – ofthelit 2016-01-07 16:43:20