tôi có các tình huống saulàm thế nào để đạt được bảng cho mỗi lớp bê tông khi lớp cơ sở là trừu tượng trong nhibernate thông thạo?
public abstract class BaseClass
{
public virtual int Id {get; set};
public virtual string Name {get; set;}
}
public class FirstSubClass : BaseClass
{
//properties and behaviour here
}
public class SecondSubClass : BaseClass
{
//properties of SecondSubclass Here
}
public class ProcessStep
{
public virtual IList<BaseClass> ContentElements {get; set;}
}
để lập bản đồ tôi đã sử dụng đoạn mã sau: -
this._sessionFactory =
Fluently.Configure().Database(SQLiteConfiguration.Standard
.ConnectionString(@"Data Source=SqliteTestSqlDataAccess.s3db; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assemblyWithDomainClasses).Conventions.Add(DefaultCascade.All())))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
Theo mặc định thông thạo sẽ bỏ qua các lớp cơ sở trừu tượng đó là BaseClass. Nhưng khi trong lớp ProcessStep có ContentElements tài sản mà trả IList, tôi đang nhận một ngoại lệ: - NHibernate.MappingException: Hiệp hội tài liệu tham khảo unmapped lớp: BaseClass
Nếu tôi bao gồm các lớp cơ sở sử dụng IncludeBase (typeof (BaseClass)) sau đó nó hoạt động tốt nhưng nó tạo ra một bảng cho các lớp BaseClass và Derived và các bản ghi được liên kết với mối quan hệ FK-PK (bảng trên mỗi lớp con). Điều tôi muốn đạt được là bảng cho mỗi lớp bê tông. đó là mỗi lớp dẫn xuất sẽ có bảng riêng của nó, nơi sẽ có tất cả các thuộc tính của các thuộc tính lớp dẫn xuất + trong lớp cơ sở. Bất kỳ ý tưởng nào để đạt được điều đó?
tôi đang sử dụng Tự động hóa như vậy, tôi không có điều khoản để ánh xạ các lớp một cách riêng biệt. – Niraj
bạn có thể trộn tự động với ánh xạ tùy chỉnh, để bạn có thể cung cấp ánh xạ chỉ cho các lớp cụ thể, phần còn lại của các lớp có thể được ánh xạ bằng cách sử dụng tự động hóa. Một cái gì đó như thế này Fluently.Configure (cấu hình) .Mappings (cfg => {cfg.AutoMappings.Add (....); cfg..FluentMappings.AddFromAssembly (Bản đồ tùy chỉnh của bạn);}) – Rajeesh