首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataAnnotations MetadataType不工作

DataAnnotations MetadataType不工作
EN

Stack Overflow用户
提问于 2012-01-14 09:41:58
回答 2查看 3.1K关注 0票数 2

我无法将MetadataType附加到应用程序中自动生成的类。我测试了在生成的类中设置Order属性,它工作得很好,但是如果尝试使用另一个类,我以后就无法获得这些属性。

我也已经尝试了here建议的解决方案,但没有成功。

生成的类

代码语言:javascript
复制
[Table(Name = "T_MKT_Product")]
public partial class T_MKT_Product : GlobalSist.DataAccess.Base.BaseEntity
{
    [Column(Storage = "_code", DbType = "varchar(20)", IsUnique = true)]
    public virtual string Code
    {
        get { return _code; }
        set
        {
            if (_code != value)
            {
                OnPropertyChanging("Code");
                _code = value;
                OnPropertyChanged("Code");
            }
        }
    }

    [Column(Storage = "_name", DbType = "varchar(200)")]
    public virtual string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                OnPropertyChanging("Name");
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    [Column(Storage = "_description", DbType = "varchar(200)", CanBeNull = true)]
    public virtual string Description
    {
        get { return _description; }
        set
        {
            if (_description != value)
            {
                OnPropertyChanging("Description");
                _description = value;
                OnPropertyChanged("Description");
            }
        }
    }
}

然后,我定义了以下类

代码语言:javascript
复制
[MetadataType(typeof(ProductMetaData))]
public partial class T_MKT_Product
{
}

public class ProductMetaData
{
    [Display(Order = -1)]
    public virtual string Code { get; set; }

    [Display(Order = -2)]
    public object Name { get; set; }

    [Display(Order = -3)]
    public object Description { get; set; }
}

救命!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-14 02:21:20

Attribute.IsDefined(currentProp,typeof(DisplayAttribute))仍然为FALSE它必须为False。您可能正在使用自定义代码检查订单!您的问题的答案非常简单:您的自定义代码根本就是错误的。这可能是错误的,因为您假装找到了与methadata类一起添加的属性以及类的所有其他“本机”属性。这是错误的!.Net Clr没有对MetaDataType属性的本机支持!这只是个惯例。这取决于您,验证您的类是否具有MetaDataType,并检索与原始类的属性同名的MetaDataType的属性。我的意思是你必须手工完成这项工作。所有Mvc引擎自动处理的属性都会被处理,这个way...that是Mvc引擎,查看MetaDataType的属性并将它们与原生attributes...You合并,在您的自定义代码中必须做同样的事情。

也就是说,如果您需要手动检索属性的view...instead中的属性,请编写一个自定义MetaDataProvider。元数据提供程序逻辑会自动为您检索所有属性(就像我解释的那样),...you只需指定对每个属性采取的操作。

票数 3
EN

Stack Overflow用户

发布于 2012-01-17 21:43:18

确保在其中定义自动生成的类的命名空间与在其中定义自定义分部类的命名空间相同。例如:

代码语言:javascript
复制
namespace FooBar
{
    [Table(Name = "T_MKT_Product")]
    public partial class T_MKT_Product : GlobalSist.DataAccess.Base.BaseEntity
    {
        ...
    }
}

还有你的:

代码语言:javascript
复制
namespace FooBar
{
    [MetadataType(typeof(ProductMetaData))]
    public partial class T_MKT_Product
    {
    }

    public class ProductMetaData
    {
        [Display(Order = -1)]
        public virtual string Code { get; set; }

        [Display(Order = -2)]
        public object Name { get; set; }

        [Display(Order = -3)]
        public object Description { get; set; }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8859453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档