[英]mapping object using fluent in nhibernate
public abstract class BaseEntity
{
public virtual int Id { get; set; }
}
public class MyClass : BaseEntity
{
public virtual Language Language { get; set; }
}
public class Language : BaseEntity
{
public virtual string Name { get; set; }
}
對應
public class MyClassMap : BaseEntityMap<MyClass>
{
public MyClassMap()
: base()
{
this.Table("MyClass");
this.References(x => x.Language).Column("Id");
}
}
public class LanguageMap : BaseEntityMap<Language>
{
public LanguageMap() : base()
{
this.Table("Language");
this.Map(x => x.Name);
}
}
語言表的db表示為LanguageID名稱1英文2 Deutsch ...
我有會話工廠內部
private ISessionFactory CreateSessionFactory()
{
return Fluently.Configure() .Database(MsSqlConfiguration.MsSql2012.ConnectionString(this.cnnString))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<LanguageMap>()
.AddFromAssembly(this.entityAssembly)
.Conventions.Setup(x =>
{
x.Add(ForeignKey.EndsWith("Id"));
}))
.ExposeConfiguration(cfg => cfg.SetInterceptor(new GeneratedPropertiesInterceptor()))
.BuildSessionFactory();
}
顯然我的當前MyClassMap存在問題,因為我沒有從數據庫表中獲得預期的結果
this.References(x => x.Language).Column("Id");
問題是:如何在MyClassMap中映射Language屬性?
你可以這樣嘗試
public class LanguageMap : BaseEntityMap<Language>
{
public LanguageMap(): base()
{
this.Table("Language");
this.Map(x => x.Name);
this.HasMany(x => x.MyClass)
.Access.CamelCaseField(Prefix.Underscore)
.Fetch.Select()
.LazyLoad()
.KeyColumns.Add("\"LanguageId\""); // database property name : LanguageId
}
}
public class MyClassMap : BaseEntityMap<MyClass>
{
public MyClassMap(): base()
{
this.Table("MyClass");
this.References(x => x.Language).Column("LanguageId");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.