2

我正在尝试对以下类使用 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 方法只指定每个非键属性一次。

我究竟做错了什么?

4

1 回答 1

0

这归结为现有项目中的一些奇怪的映射配置。我无法准确指出问题所在,但它现在正在工作。应该在发布之前在一个干净的项目中进行测试!

于 2013-01-14T11:39:40.673 回答