Nhibernateを新しくしました。 私が作成したプログラムを実行しようとすると、このエラーが発生します。 "'Post_OfficeProxy'タイプのオブジェクトを 'System.String'と入力することができません。"nhibernateのテーブルとカスタムタイプの結合
DBテーブルは
POSTOFFICE.POST_OFFICE (PO_CODEチャー(8)、PO_NAME、PO_ADD)
POSTOFFICE.RECEIPT_BOOK(BOOK_NO、PO_CODEチャー(7)、ADD_DATE、ADD_USERあります、ADD_IP_ADDRESS)
PO_CODE列は、同じデータが含まれていますが、私が欲しいの外部キーが定義されていない 結果が BOOK_NO、PO_CODE、PO_NAMEを含むグリッドです、ADD_DATE、ADD_USER、ADD_IP_ADDRESSを指定します。
Post_Office.hbm.xmlファイル
<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Postal" namespace="Postal.Models"> <class name="Post_Office" table="POSTOFFICE.POST_OFFICE" lazy="true" >
<id name="PO_CODE" column="PO_CODE" />
<property name="PO_NAME">
<column name="PO_NAME" sql-type="VARCHAR2" not-null="true" />
</property>
<property name="PO_ADD">
<column name="PO_ADD" sql-type="VARCHAR2" not-null="false" /> </property> </class></hibernate-mapping>
Reciept.hbm.xmlファイル
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Postal" namespace="Postal.Models">
<class name="Reciept" table="POSTOFFICE.RECEIPT_BOOK" lazy="true" >
<id name="Book_no" column="BOOK_NO" />
<many-to-one name="po_code" class="Post_Office" column="PO_CODE" cascade="none" />
<property name="Add_date">
<column name="ADD_DATE" sql-type="DATE" not-null="false" />
</property>
<property name="Add_user">
<column name="ADD_USER" sql-type="VARCHAR2" not-null="false" />
</property>
<property name="Add_ip_address">
<column name="ADD_IP_ADDRESS" sql-type="VARCHAR2" not-null="false" />
</property>
</class>
</hibernate-mapping>
二つのクラス
using System.Linq;
using System.Web;
namespace Postal.Models
{
public class Post_Office
{
[Key]
[Required]
[Display(Name = "PO code : ")]
public virtual string PO_CODE { get; set; }
[Required]
[Display(Name = "PO Name : ")]
public virtual string PO_NAME { get; set; }
[Display(Name = "PO Address : ")]
public virtual string PO_ADD { get; set; }
}
}
public class Reciept
{
[Key]
[Required]
[Display(Name = "Book No. : ")]
public virtual string Book_no { get; set; }
[Required]
[Display(Name = "PO code : ")]
public virtual string po_code { get; set; }
[Display(Name = "Add Date : ")]
public virtual DateTime? Add_date { get; set; }
[Display(Name = "Add User. : ")]
public virtual string Add_user { get; set; }
[Display(Name = "IP Address : ")]
public virtual string Add_ip_address { get; set; }
}
DALのクラスで機能
public IList<Reciept> Get_Records(string po_code)
{
IList<Reciept> p = null;
using (ISession session = OpenSession())
{
Reciept d = null;
Post_Office dt = null;
try
{
p = session.QueryOver<Reciept>(() => d)
.JoinAlias(() => d.po_code,() => dt)
//.Where(() => dt.PO_CODE == "PD06003")
.List<Reciept>();
}
catch (Exception rd)
{ }
}
return p;
}
誰かが私を正しい方向に導くことができますか?事前ごJoinAliasで
ポールのソリューションは、私にはよさそうだが、あなたはそれでいる間、あなたも(問題とは無関係の)領収書のクラスのスペルを修正したい場合があります。 –