将数据注释添加到派生类中的成员

时间:2012-11-30 11:11:24

标签: c# .net

我有一个由几个项目组成的解决方案。其中一个项目是POCO对象的容器,在所有其他项目之间共享。由于对象需要与Windows Phone,Silverlight,Windows Apps等兼容,因此它创建为只包含一部分引用的共享库。

我想重新使用这些对象来实现数据库模型的代码优先,这需要我向成员添加数据注释属性。但是数据注释命名空间不包含在引用子集中。

所以我想我会在我的服务API项目中创建派生类,在那里添加数据注释。但我不太确定如何做到这一点,或者甚至可以做到。

所以我正在寻找一些想法,也许是最佳实践。当然我可以创建新模型并使用映射技术从一个到另一个获取数据,但是当它们100%相等时听起来有点愚蠢。

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用MetadataTypeAttribute

[MetadataType(typeof(Metadata))]
public class DerivedEntity : PocoEntity
{
   private sealed class Metadata
   {
      [Required, AnotherAnnotation]
      public object NameOfPropertyToDecorate;
   }
}

修改
这不起作用。如果将MetadataType属性添加到基类,它可以工作;如果将其添加到派生类,则会忽略注释。这种行为感觉就像一个bug,但可能有一个原因。

您最好的选择可能是使用the fluent API来配置您的实体。

public class YourContext : DbContext
{
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
      base.OnModelCreating(modelBuilder);
      modelBuilder.Configurations.Add(new PocoEntityConfiguration());
   }
}

public class PocoEntityConfiguration : EntityTypeConfiguration<PocoEntity>
{
   public PocoEntityConfiguration()
   {
      Property(e => e.TheProperty)
         .IsRequired()
         .HasMaxLength(80)
         ...
      ;
   }
}