0

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

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

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

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

4

1 回答 1

2

您是否尝试过使用MetadataTypeAttribute

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

编辑
这不起作用。如果将MetadataType属性添加到基类,它会起作用;如果将其添加到派生类,则注释将被忽略。这种行为感觉像是一个错误,但可能是有原因的。

您最好的选择可能是使用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)
         ...
      ;
   }
}
于 2012-11-30T12:49:19.983 回答