2009-07-14 12 views
0

私はNHibernateの初心者です。私はマッピングファイルの問題に直面しています。私は2つのテーブルFeturesとPriorityを持っています。 機能FEATUREID(PK)、FEATURENAMEは、PriorityID(FK) Priorty PriorityID(PK)、priorityNameのasp.netのNhibernateマッピング

私はテーブルを搭載したグリッドをバインドしたいが、しかし、グリッドがpriorityNameのではなく、PriorityIDが含まれている必要があります。 私は1対1、多対1および袋を試しました。 フィーチャクラスで特定のPriorityIDのPriorityNameを取得できるようにマッピングファイルを書き込む方法を教えてください。

私はそれが非常に単純な質問であることを知っています。しかし、何も私のために働いた。グーグルでたくさんの後に私はここに投稿しています。

くれアドバンス

答えて

1

で 感謝を助けてください。ここFluent NHibernateSQLiteを使用したサンプルです:

using System.Data; 
using System.IO; 
using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using FluentNHibernate.Mapping; 
using NHibernate; 

public class Priority 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

public class Feature 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Priority Priority { get; set; } 
} 

public class PriorityMap : ClassMap<Priority> 
{ 
    public PriorityMap() 
    { 
     WithTable("Priority"); 
     Id(x => x.Id, "PriorityID"); 
     Map(x => x.Name, "PriorityName"); 
    } 
} 

public class FeatureMap : ClassMap<Feature> 
{ 
    public FeatureMap() 
    { 
     WithTable("Feature"); 
     Id(x => x.Id, "FeatureID"); 
     Map(x => x.Name, "FeatureName"); 
     References<Priority>(x => x.Priority, "PriorityID"); 
    } 
} 

public static class SessionFactoryEx 
{ 
    private const string _dbFile = @"C:\data.db3"; 
    static SessionFactoryEx() 
    { 
     if (File.Exists(_dbFile)) 
     { 
      File.Delete(_dbFile); 
     } 
     using (var factory = SessionFactoryEx.GetSessionFactory()) 
     using (var connection = factory.ConnectionProvider.GetConnection()) 
     { 
      SessionFactoryEx.ExecuteQuery("create table Priority(PriorityID int, PriorityName string)", connection); 
      SessionFactoryEx.ExecuteQuery("create table Feature(FeatureID int, FeatureName string, PriorityID int)", connection); 

      SessionFactoryEx.ExecuteQuery("insert into Priority (PriorityID, PriorityName) values (1, 'p1')", connection); 
      SessionFactoryEx.ExecuteQuery("insert into Feature (FeatureID, FeatureName, PriorityID) values (1, 'f1', 1)", connection); 
      SessionFactoryEx.ExecuteQuery("insert into Feature (FeatureID, FeatureName, PriorityID) values (2, 'f2', 1)", connection); 
      SessionFactoryEx.ExecuteQuery("insert into Feature (FeatureID, FeatureName, PriorityID) values (3, 'f3', 1)", connection); 
     } 

    } 
    private static ISessionFactory _sessionFactory = null; 
    public static ISessionFactory GetSessionFactory() 
    { 
     if (_sessionFactory == null) 
     { 
      _sessionFactory = CreateSessionFactory(); 
     } 
     return _sessionFactory; 
    } 

    private static ISessionFactory CreateSessionFactory() 
    { 
     return Fluently.Configure() 
      .Database(
       SQLiteConfiguration.Standard.UsingFile(_dbFile).ShowSql() 
      ) 
      .Mappings(
       m => m.FluentMappings.AddFromAssemblyOf<Priority>() 
      ).BuildSessionFactory(); 
    } 

    public static void ExecuteQuery(string sql, IDbConnection connection) 
    { 
     using (var command = connection.CreateCommand()) 
     { 
      command.CommandText = sql; 
      command.ExecuteNonQuery(); 
     } 
    } 
} 

そして、あなたのASPXページでは、データをバインドすることができます。

<%@ Page Language="C#" AutoEventWireup="true" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      using (var factory = SessionFactoryEx.GetSessionFactory()) 
      using (var session = factory.OpenSession()) 
      using (var tx = session.BeginTransaction()) 
      { 
       var features = session.CreateCriteria(typeof(Feature)).List<Feature>(); 
       featuresGrid.DataSource = features; 
       featuresGrid.DataBind(); 
      } 
     } 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="featuresGrid" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateField HeaderText="Id"> 
        <ItemTemplate> 
         <%# Eval("Id") %> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Name"> 
        <ItemTemplate> 
         <%# Eval("Name") %> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Priority Name"> 
        <ItemTemplate> 
         <%# Eval("Priority.Name") %> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </div> 
    </form> 
</body> 
</html>