0

したがって、TPC (Type per Concrete type) 階層は次のようになります。

OrderOrderDetailはどちらも、抽象クラスAuditableEntityから派生した具象型です。

AuditableEntity の構成は次のとおりです。

 public class AuditableEntityConfig : EntityTypeConfiguration<AuditableEntity>
{
    public AuditableEntityConfig ()
    {
        //this.Property(m => m.IDN).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        this.HasKey(m => m.IDN);

        this.Property(m => m.Timestamp).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed).IsRowVersion().IsRequired();
        this.Property(m => m.AddedDate).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Property(m => m.ModifiedDate).IsOptional();
        this.Property(m => m.ModifiedByUser).IsOptional();
        this.Property(m => m.RowGuid).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }
}

したがって、抽象クラスの監査関連フィールドにこの構成を設定するという考え方があり、これはすべての派生クラスに適用されます。モデルの初期化中に次のコードが使用されます。

var builder = new DbModelBuilder();
builder.Configurations.Add(new AuditableEntityConfig());
builder.Configurations.Add(new OrderConfig());
builder.Configurations.Add(new OrderDetailsConfig());

TPC 設定は、それぞれの具象型構成にあります。

Map(m =>
        {
            m.MapInheritedProperties();
            m.ToTable("Order");
        });

Map(m =>
        {
            m.MapInheritedProperties();
            m.ToTable("OrderDetail");
        });

ただし、 http:localhost:4040/MyServiceという URL を使用して Wcf データ サービス経由でこれにアクセスすると、AuditableEntitiesタイプのみが公開され、http:localhost:4040/MyService/AuditableEntitiesは両方の具体的なタイプのデータを返しますが、http: localhost:4040/MyService/Ordersまたはhttp:localhost:4040/MyService/OrderDetailsは機能しません。

ただし、「builder.Configurations.Add(new AuditableEntityConfig())」を削除すると、具象型の URI が機能してデータが返されますが、監査関連のプロパティに抽象的な構成を適用するという目的が無効になります。

MyDbContext は、Orders および OrderDetails DbSet のみを公開します。

public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }

Wcf データ サービスは、WPF ウィンドウで自己ホストされます。すべての権限が付与されます。

不足している設定は何ですか?

補足的な質問: このサービス参照をクライアント プロジェクトに追加すると、コンテキストは MyDbContext ではなく「CodeFirstContainer」という名前になります。どうしてこれなの?

ありがとう

4

0 に答える 0