0

私はこの単純なモデルを持っています:

public Store
{
    public virtual Id { get; protected set; }
    ...
    public virtual ICollection<UserBase> Users { get; protected set; }
}

public abstract UserBase
{
    public virtual Id { get; protected set; }
    public virtual string EMail { get; set; }
    public virtual string Password { get; set; }
}

public Customer : UserBase
{
    public virtual string Address { get; set; }
}

そして、私はこの流暢なマッピングを持っています:

public class StoreMap : ClassMap<Store>
{
    public StoreMap()
    {
        Id(x => x.Id).GeneratedBy.GuidComb();
        HasMany(x => x.Users).Cascade.AllDeleteOrphan();
    }
}

public class UserBaseMap : ClassMap<UserBase>
{
    public UserBaseMap()
    {
        UseUnionSubclassForInheritanceMapping();

        Id(x => x.Id).GeneratedBy.GuidComb();
        Map(x => x.EMail).Not.Nullable();
        Map(x => x.Password).Not.Nullable();
    }
}

public class CustomerMap : SubclassMap<Customer>
{
    public CustomerMap ()
    {
        Abstract();

        Map(x => x.Address).Not.Nullable();
    }
}

これは Table Per Concrete マッピングのマッピングであり、データベース スキーマは期待どおりに生成されます (UserBase テーブルがなく、これは適切です)。

しかし、顧客をユーザー コレクションに追加しようとすると、次のようになります。

using (var t = session.BeginTransaction()) {
    var myCustomer = new Customer { EMail = "mail@mail.com", Password = "YouShouldntLookAtThis" };
    var store = GenericRepository.GetById<Store>(RootId);
    store.Users.Add(myCustomer);
    t.Commit();
}

次の例外が発生しました。

例外の詳細: System.Data.SqlClient.SqlException: Invalid object name 'UserBase'.

マッピングの問題だと思いますが、問題がわかりません。これを理解するのを手伝ってもらえますか?

4

1 に答える 1

0

これが私の5セントです

テーブル名を含めるように Customer クラスのマッピングを変更できますか

Table("顧客");

于 2013-07-29T13:12:17.130 に答える