0

いくつかのプロジェクトで構成されるソリューションがあります。これらのプロジェクトの1つは、他のすべてのプロジェクト間で共有されるPOCOオブジェクトのコンテナーです。オブジェクトはWindowsPhone、Silverlight、Windows Appsなどと互換性がある必要があるため、参照のサブセットのみを含む共有ライブラリとして作成されます。

これらのオブジェクトをデータベースモデルのコードファースト実装に再利用したいので、メンバーにデータ注釈属性を追加する必要があります。ただし、データ注釈名前空間は参照サブセットに含まれていません。

そこで、サービスAPIプロジェクトで派生クラスを作成して、そこにデータアノテーションを追加すると思いました。しかし、私はこれをどのように行うのか、あるいはそれができるのかどうかさえよくわかりません。

だから私はいくつかのアイデア、おそらくベストプラクティスを探しています。もちろん、新しいモデルを作成し、マッピング手法を使用してデータを相互に取得することもできますが、100%等しい場合は、少しばかげているように聞こえます。

4

1 に答える 1

2

MetadataTypeAttributeを使用してみましたか?

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

編集
これは機能しません。MetadataType属性を基本クラスに追加すると、機能します。派生クラスに追加すると、アノテーションは無視されます。この動作はバグのように感じますが、それには理由があるかもしれません。

おそらく最善の選択肢は、流暢な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 に答える