EF 5.0 Code First - TPH映射

时间:2013-01-08 12:42:03

标签: entity-framework entity-framework-5

我正在尝试将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方法仅指定每个非键属性一次。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这取决于现有项目中的一些奇怪的映射配置。我无法确切地指出问题究竟是什么,但它现在正在发挥作用。应该在发布之前在一个干净的项目中进行测试!