2

次のクラスに TPH マッピングを使用しようとしています。現時点では派生クラスが 1 つしかないことは無視してください。実際のコードには多くの派生クラスがあります。

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 が複数回呼び出されましたが、少なくとも 1 つの呼び出しでターゲット テーブル名が指定されていませんでした。

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' のプロパティは、一度しかマップできません。非キー プロパティ 'Username' が複数回マップされています。Properties メソッドが各非キー プロパティを 1 回だけ指定していることを確認します。

私は何を間違っていますか?

4

1 に答える 1

0

This was down to some weird mapping configuration in an existing project. I can't pinpoint exactly what the issue was but it's working now. Should have tested in a clean project before posting!

于 2013-01-14T11:39:40.673 に答える