实体框架代码优先(使用TPC)和Wcf数据服务映射

时间:2012-10-12 23:33:53

标签: entity-framework ef-code-first wcf-data-services

所以,我有一个TPC(Type per Concrete type)层次结构:

订单订单详细信息都是从抽象类派生的具体类型 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 DbSets:

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

Wcf数据服务是在WPF窗口中自托管的。授予所有权限。

我缺少哪些设置?

补充问题:当我将此服务引用添加到客户端项目时,上下文被命名为“CodeFirstContainer”而不是MyDbContext。这是为什么?

由于

0 个答案:

没有答案
相关问题