Свободный NHibernate Много к одному отображению - PullRequest
1 голос
/ 25 марта 2010

Я создаю приложение NHibenate с отношениями один ко многим. Как данные города и штата. Городской стол

CREATE TABLE [dbo].[State](
    [StateId] [varchar](2)  NOT NULL primary key,
    [StateName] [varchar](20) NULL)
CREATE TABLE [dbo].[City](
    [Id] [int] primary  key IDENTITY(1,1) NOT NULL ,
    [State_id] [varchar](2)  NULL refrences State(StateId),
    [CityName] [varchar](50)  NULL)

Мое отображение следующее

public CityMapping()
{
    Id(x => x.Id);
    Map(x => x.State_id);
    Map(x => x.CityName);
    HasMany(x => x.EmployeePreferedLocations)
        .Inverse()
        .Cascade.SaveUpdate();
    References(x => x.State)
        //.Cascade.All();
        //.Class(typeof(State))
        //.Not.Nullable() 
        .Cascade.None()  
        .Column("State_id");
}

public StateMapping()
{
    Id(x => x.StateId)
        .GeneratedBy.Assigned();
    Map(x => x.StateName);
    HasMany(x => x.Jobs)
        .Inverse();
        //.Cascade.SaveUpdate();
    HasMany(x => x.EmployeePreferedLocations)
        .Inverse();

   HasMany(x => x.Cities)
       // .Inverse()
       .Cascade.SaveUpdate();
       //.Not.LazyLoad()
}

Модели следующие:

[Serializable]
public partial class City
{
    public virtual System.String CityName { get; set; }
    public virtual System.Int32 Id { get; set; }
    public virtual System.String State_id { get; set; }
    public virtual IList<EmployeePreferedLocation> EmployeePreferedLocations { get; set; }
    public virtual JobPortal.Data.Domain.Model.State State { get; set; }

    public City(){}

}

public partial class State
{
    public virtual System.String StateId { get; set; }
    public virtual System.String StateName { get; set; }
    public virtual IList<City> Cities { get; set; }
    public virtual IList<EmployeePreferedLocation> EmployeePreferedLocations { get; set; }
    public virtual IList<Job> Jobs { get; set; }
    public State()
    {
        Cities = new List<City>();
        EmployeePreferedLocations = new List<EmployeePreferedLocation>();
        Jobs = new List<Job>();
    }

    //public virtual void AddCity(City city)
    //{
    //    city.State = this;
    //    Cities.Add(city);

    //}
}

Код моего модульного тестирования указан ниже.

City city = new City();

IRepository<State> rState = new Repository<State>();
Dictionary<string, string> critetia = new Dictionary<string, string>();
critetia.Add("StateId", "TX");
State frState = rState.GetByCriteria(critetia);

city.CityName = "Waco";
city.State = frState;

IRepository<City> rCity = new Repository<City>();

rCity.SaveOrUpdate(city);

City frCity = rCity.GetById(city.Id);

Проблема в том, что я не могу вставить запись. Ошибка ниже.

"Invalid index 2 for this SqlParameterCollection with Count=2."

Но ошибка не возникнет, если я прокомментирую поле отображения State_id в файле CityMapping. Я не знаю, какую ошибку я совершил. Если не указать отображение Map (x => x.State_id); значение этого поля равно нулю, что желательно. Пожалуйста, помогите мне, как решить эту проблему.

1 Ответ

1 голос
/ 25 марта 2010

Несколько замечаний:

  1. Удалите это свойство State_id из класса City и сопоставления. У вас уже есть свойство State, поэтому оно не имеет смысла в вашей объектной модели.

  2. Эти свойства Jobs и EmployeePreferedLocations в классе State не имеют связанных столбцов / таблиц в вашей базе данных (по крайней мере, той, что вы здесь показали), пока у вас есть сопоставления для них .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...