我有一个由几个项目组成的解决方案。其中一个项目是POCO对象的容器,在所有其他项目之间共享。由于对象需要与Windows Phone,Silverlight,Windows Apps等兼容,因此它创建为只包含一部分引用的共享库。
我想重新使用这些对象来实现数据库模型的代码优先,这需要我向成员添加数据注释属性。但是数据注释命名空间不包含在引用子集中。
所以我想我会在我的服务API项目中创建派生类,在那里添加数据注释。但我不太确定如何做到这一点,或者甚至可以做到。
所以我正在寻找一些想法,也许是最佳实践。当然我可以创建新模型并使用映射技术从一个到另一个获取数据,但是当它们100%相等时听起来有点愚蠢。
答案 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)
...
;
}
}