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

时间:2012-01-06 22:24:32

标签: 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...
        }
    }
}

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

  

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

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

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

3 个答案:

答案 0 :(得分:4)

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

  

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

答案 1 :(得分: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数据上下文的名称空间与部分类的名称空间匹配,则此方法有效。您是否可以尝试评论您的房产映射以消除这些问题,并了解您是如何离开那里的?

答案 2 :(得分:1)

对我来说有用的是,在解决方案资源管理器中,右键单击包含我的部分类的.cs文件,选择“属性”,然后将“构建操作”设置为“编译”。无论出于何种原因,默认情况下文件的Build Action都设置为Content。 (花了我几个小时来解决这个问题。希望这能节省时间。)