私はこの単純なモデルを持っています:
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'.
マッピングの問題だと思いますが、問題がわかりません。これを理解するのを手伝ってもらえますか?