我正在尝试对以下类使用 TPH 映射。忽略现在只有一个派生类,真正的代码有很多派生。
public abstract class Account
{
public virtual int Id { get; set; }
}
public class UserAccount : Account
{
public virtual string Username { get; set; }
public virtual string Password { get; set; }
public virtual string PasswordSalt { get; set; }
public virtual bool Verified { get; set; }
}
映射...
public class AccountMapping : EntityTypeConfiguration<Account>
{
public AccountMapping()
{
this.ToTable("Account");
}
}
public class UserAccountMapping : EntityTypeConfiguration<UserAccount>
{
public UserAccountMapping()
{
this.Property(x => x.Username).HasMaxLength(50);
this.Property(x => x.Password).HasMaxLength(68);
this.Property(x => x.PasswordSalt).HasMaxLength(24);
this.Map(x => x.Requires("AccountTypeId").HasValue((int)AccountType.User));
}
}
尝试调用 Add-Migration 时出现以下错误...
Map 被多次调用,类型为“UserAccount”,并且至少有一次调用未指定目标表名称。
将 UserAccountMapping 更改为...
public class UserAccountMapping : EntityTypeConfiguration<UserAccount>
{
public UserAccountMapping()
{
this.Property(x => x.Username).HasMaxLength(50);
this.Property(x => x.Password).HasMaxLength(68);
this.Property(x => x.PasswordSalt).HasMaxLength(24);
this.Map(x =>
{
x.ToTable("Account");
x.Requires("AccountTypeId").HasValue((int)AccountType.User));
});
}
}
似乎解决了这个问题,但后来我得到关于属性被多次映射的错误:
'UserAccount' 类型的属性只能映射一次。非键属性“用户名”被多次映射。确保 Properties 方法只指定每个非键属性一次。
我究竟做错了什么?