簡體   English   中英

在NHibernate中使用fluent映射對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM