ASP.NET动态数据没有看到部分元数据"伙伴"类

Mat*_*son 6 c# asp.net entity-framework dynamic-data partial-classes

我有一个ASP.NET 4动态数据网站,它运行在一组相当简单的数据库表中,通过另一个程序集中的实体框架模型公开.我不想在EF模型中构建所有表,因此在我的global.asax文件中,我已经初始化了默认模型,如下所示:

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...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在加载Default.aspx时,我收到以下错误消息:

没有可访问的表.确保在Global.asax中注册了至少一个数据模型,并启用了scaffolding或实现自定义页面.

我以前在类似的场景中使用它; 这次尝试的另一个不同之处在于我的EF模型是它自己的组件.如果我更改global.asax继续并脚手架所有表,它可以正常工作.但显然,我不希望如此.我小心翼翼地确保部分元数据类的名称空间与EF数据上下文的名称空间匹配.

所以我很难过......

Mat*_*son 4

所以,我是个白痴:这不是 EF 或动态数据问题,而是 C# 约束。来自MSDN

所有属于同一类型部分的部分类型定义必须在同一程序集和同一模块(.exe 或 .dll 文件)中定义。部分定义不能跨越多个模块。