我正在尝试将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时出现以下错误...
对于“UserAccount”类型以及至少一个调用,多次调用了Map 没有指定目标表名。
将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方法仅指定每个非键属性一次。
我做错了什么?
答案 0 :(得分:0)
这取决于现有项目中的一些奇怪的映射配置。我无法确切地指出问题究竟是什么,但它现在正在发挥作用。应该在发布之前在一个干净的项目中进行测试!