所以,我有一个 TPC(每种具体类型的类型)层次结构,如下所示:
Order和OrderDetail都是派生自抽象类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");
});
但是,当通过 URL 为http:localhost:4040/MyService的 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 窗口中自承载。已授予所有权限。
我缺少什么设置?
补充问题:当我将此服务引用添加到客户端项目时,上下文被命名为“CodeFirstContainer”而不是 MyDbContext。为什么是这样?
谢谢