我有一个'master'Visual Studio项目,其中包含类似于:
的实体框架映射public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// Table Mapping
ToTable("Users");
this.Property(x => x.Username).HasColumnName("Username");
// Other mapping goes here
}
}
被映射的User
实体只是一个简单的POCO:
public class User {
public string Username { get; set; }
// Other properties omitted for brevity
}
我有第二个'子'VS项目/应用程序(引用主项目),它具有以下ExtendedUser
实体/ POCO,也使用EF进行映射:
public class ExtendedUser : User {
// Extra navigation properties
public ICollection<Order> Orders { get; set; }
}
此实体没有额外的字段,但确实有各种特定于该应用程序的关系集合,并且只有该应用程序。
我的问题是我想继承在第一个VS项目中为User
定义的映射。主User
类将用于其他几个项目中,因此我需要避免重复映射。
如果我将映射定义为:
public class ExtendedUserMap : UserMap
{
public UserMap()
{
}
}
然后我无法引用任何ExtendedUser
属性,因为映射的类型为EntityTypeConfiguration<User>
而不是EntityTypeConfiguration<ExtendedUser>
。
显然我不能从两个类继承,所以我不确定一个合适的方法来实现我想做的事。
如何定义ExtendedUserMap
以便我可以使用User
映射并包含ExtendedUser
的导航属性?
答案 0 :(得分:1)
您可以将基本映射类定义略有不同:
public abstract class UserMapBase<TUser> : EntityTypeConfiguration<TUser>
where TUser : User
{
protected UserMapBase()
{
// Table Mapping
ToTable("Users");
this.Property(x => x.Username).HasColumnName("Username");
// Other mapping goes here
}
}
现在您可以拥有类似的子类:
public class UserMap : UserMapBase<User>
{ }
public class ExtendedUserMap : UserMapBase<ExtendedUser>
{
public ExtendedUserMap()
{
// map ExtendedUser properties here.
}
}