0

そのため、NHibernate 3.0 の xml ファイルとのマッピングでエラーが発生します。マップしようとしている MediaContent クラスがあり、問題が発生しています。マッピングが構成に表示されないため、xml マッピングと関係があることはわかっています。

MediaContent クラスは次のとおりです (列挙型は ContentAccessibility と MediaTypes です)。

public class MediaContent:IMediaContent,ICreatedAndModified, IActive, IArchived
{
    #region Properties/Members
    public int MediaContentID { get; set; }
    public string Name { get; set; }
    public string FileName { get; set; }
    public ContentAccessibility Accessibility { get; set; }
    public MediaTypes MediaType { get; set; }
    public object Media { get; set; }
    public Dictionary<string, object> MediaProperties { get; set; }
    public string Author { get; set; }
    public string InternalIdentifier { get; set; }
    public string CreatedBy { get; private set; }
    public DateTime? CreatedOn { get; private set; }
    public string LastModifiedBy { get; private set; }
    public DateTime? LastModifiedOn { get; private set; }
    public string ComplianceCode { get; private set; }

    public bool IsActive { get; private set; }
    public bool Archived { get; private set; }
    #endregion


    #region Methods
    public void Create(DateTime createdOn, string createdBy)
    {
        CreatedOn = createdOn;
        CreatedBy = createdBy;
    }
    public void Modified(DateTime modifiedOn, string modifiedBy)
    {
        LastModifiedBy = modifiedBy;
        LastModifiedOn = modifiedOn;
    }
    #endregion


}

MediaContent.hbm.xml ファイルは次のとおりです。

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                                     assembly="Domain"
                                     namespace="Domain.Models">

  <class name="MediaContent" lazy="false" table="MediaContent">
    <!-- Identity Mapping-->
    <id name="MediaContentID">
      <column name="MediaContentID" />
      <generator class="native" />
    </id>

    <!-- Simple Property Mappings-->    
    <property name="Name" />
    <property name="FileName" />
    <property name="Accessibility" />
    <property name="MediaType" />
    <property name="Media" />
    <property name="Author" />
    <property name="InternalIdentifier" />
    <property name="ComplianceCode" />
    <property name="CreatedBy" />
    <property name="CreatedOn" />
    <property name="LastModifiedBy" />
    <property name="LastModifiedOn" />    
    <property name="IsActive" />
    <property name="Archived" />  

  </class>
</hibernate-mapping>

NHibernate がどのように機能するかを見落としている可能性がありますが、私の知る限り、それ以外は問題ないはずです。

4

1 に答える 1

0

ここには無数の問題があります:

  1. MediaTypeとContentAccessibilityは具象クラスのように見えるので、ある種の参照マッピングが必要です。これは通常、文字列、int、日付などのプリミティブプロパティ用に予約されているため、これらはプロパティではありません。

  2. プロパティの少なくとも1つはオブジェクトタイプであり、プロパティとして単純にマップすることはできません。この状況はかなり最近発生しましたが、文字列としてマップしてから、ドメイン上の適切なもの(GUID、日付など)に変換する方が簡単であることがわかりました。

HBMを完全には覚えていませんが、DateTimeプロパティがnull許容であることを示すために何かが必要になる場合もあります。私があなたなら、コードでNHマッピングを調べます。

于 2013-03-05T15:55:36.620 に答える