У меня есть два класса: класс Site и класс Phase. Класс Site определяет коллекцию Phases. Каждый класс соответствует таблице базы данных. База данных (SQL Server 2000) имеет ссылку «один ко многим» между двумя таблицами, так что данный сайт может быть связан со многими фазами, а данная фаза может быть связана только с одним сайтом.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class Site
{
public virtual int Id {get; set;}
[Required]
[Editable(true)]
[StringLength(64)]
public virtual string Name { get; set; }
public virtual ICollection<Phase> Phases {get; set;}
}
public class Phase
{
public virtual int Id {get; set;}
[Required]
[Editable(true)]
[StringLength(64)]
public virtual string Name { get; set; }
[Editable(true)]
[StringLength(16)]
public virtual string Code { get; set; }
public virtual int SiteId {get; set;}
public virtual Site Site {get; set;}
}
Я использую FluentNHibernate для отображения. Я хочу отобразить это так, чтобы я мог создать новый экземпляр сайта, назначить несколько экземпляров Phase и сделать один вызов, чтобы получить все экземпляры в базе данных:
Site site = new Site() { Name = "SiteName" };
Phase phase = new Phase() { Name = "PhaseName", Code = "Code" };
Phase otherPhase = new Phase() { Name = "OtherPhaseName" };
site.Phases.Add(phase);
site.Phases.Add(otherPhase);
Session.SaveOrUpdate(site);
У меня есть следующие сопоставления, но они не справляются:
public class SiteMap : ClassMap<Site>
{
public SiteMap()
{
Id(p => p.Id).Column("ST_ID").GeneratedBy.Native();
Map(p => p.Name).Column("ST_Name");
HasMany<Phase>(x => x.Phases).KeyColumn("ST_ID").LazyLoad().Inverse().AsSet();
}
}
public class PhaseMap : ClassMap<Phase>
{
public PhaseMap()
{
Id(p => p.Id).Column("PH_ID").GeneratedBy.Native();
Map(p => p.Name).Column("PH_Name");
Map(p => p.Code).Column("PH_Code").Nullable();
Map(p => p.SiteId).Column("ST_ID");
References<Site>(x => x.Site).Column("ST_ID").LazyLoad(Laziness.Proxy).Not.Insert().Not.Update();
}
}
Я новичок в NHibernate в целом, поэтому я понимаю, что могут быть другие проблемы с отображениями, показанными здесь, о которых я не знаю. Буду признателен за любую помощь в том, как лучше всего сопоставить эти два класса. ТИА.