Исключение отображения, выданное NHibernate - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть следующие модели:

WeatherForecast:

namespace TravelAssistant.Model.HelperModels.Weather
public class WeatherForecast:EntityBase<int>
{
    public IList<DayForecast> ForecastDays { get; set; }

    public LocationBase ForecastLocation  { get; set; }

    public void Init(Location.LocationBase location)
    {
        this.ForecastLocation = location;
    }

    protected override void Validate()
    {
        throw new NotImplementedException();
    } 
}

LocationBase:

 namespace TravelAssistant.Model.HelperModels.Location
    public class LocationBase:EntityBase<int>
    {  

        public string WorldRegion { get; set; }

        public string City { get; set; }

        public string Country { get; set; }

        public string Zipcode { get; set; }

        public string StreetNameNumber { get; set; }
   }

где EntityBase определяет идентификатор типа T и следующие файлы .hbm

WeatherForecast.hbm.xml:

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
        namespace="TravelAssistant.Model.HelperModels.Weather"
                assembly="TravelAssistant.Model">

    <class name="WeatherForecast" table="WeatherForecasts" lazy="false" >
        <id  name="Id" column="WeatherForecastID"  
                           type="int" unsaved-value="0">
            <generator class="native" />
        </id>

        <many-to-one name="ForecastLocation"
                   cascade="all" 
                   class="LocationBase" 
                   column="LocationID" 
                   not-null="false" />

        <bag name="ForecastDays" lazy="false" >
            <key column="WeatherForecastID"/>
            <one-to-many class="DayForecast"></one-to-many>
        </bag>
    </class>
</hibernate-mapping>

LocationBase.hbm.xml

    <id  name="Id" column="LocationID" type="int" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="City">
      <column name="City" 
              sql-type="varchar(150)" not-null="true" />
    </property>
    <property name="Country">
      <column name="Country" 
              sql-type="varchar(50)" not-null="true" />
    </property>
    <property name="Zipcode">
      <column name="Zipcode" 
              sql-type="varchar(50)" not-null="false" />
    </property>
    <property name="StreetNameNumber">
      <column name="StreetNameNumber" 
              sql-type="varchar(150)" not-null="false" />
    </property>
    <property name="WorldRegion">
      <column name="WorldRegion" 
              sql-type="varchar(100)" not-null="false" />
    </property>
  </class>
</hibernate-mapping>

Модель базы данных:

WeatherForecasts : WeatherForecastID, LocationID
Locations:LocationID,City,Country,Zipcode, StreetNameNumber,WorldRegion.

Когда я запускаю программу, я получаю:

Ассоциация из таблицы WeatherForecasts относится к несопоставленному классу:

TravelAssistant.Model.HelperModels.Weather.LocationBase

Может кто-нибудь указать мне, где я ошибся?

1 Ответ

0 голосов
/ 11 ноября 2011

Попробуйте использовать полное имя класса для связи «многие к одному» в отображении WeatherForecast.

<many-to-one     
    name="ForecastLocation"
    cascade="all"
    class="TravelAssistant.Model.HelperModels.Location.LocationBase, TravelAssistant.Model"
    column="LocationID"
    not-null="false"   />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...