NHibernateとHiLo戦略を使用していますが、問題は、コレクション内のオブジェクトのIDがSession.Save()で生成されないことです(Transaction.Commit()でのみ)。例えば:
ImageGallery imageGallery = imageGalleryRepository.GetById(imgGalleryId);
imageGallery.Images.Add(new Image());
imageGalleryRepository.Save(imageGallery); // Here I need to access ID propery of new image in Images collection but it's 0 until I commit transaction. Can it be done?
これが私が持っているコードです:
public abstract class Entity
{
public virtual int Id { get; set; }
}
public class ImageGallery : Entity
{
public virtual IList<Image> Images { get; set; }
// ...
}
public class Image : Entity
{
public string FileName { get; set; }
public ImageGallery ImageGallery { get; set; }
// ...
}
マッピング:
public class ImageGalleryMap : ClassMap<ImageGallery>
{
public ImageGalleryMap()
{
Id(x => x.Id).GeneratedBy.HiLo("hibernate_unique_key", "next_hi_image_gallery", "10");
HasMany(x => x.Images).
Cascade.All().
KeyColumn("GalleryId").
Inverse().
Fetch.Join();
}
}
public class GalleryImageMap : ClassMap<GalleryImage>
{
public GalleryImageMap()
{
Id(x => x.Id).GeneratedBy.HiLo("hibernate_unique_key", "next_hi_image", "10");
Map(x => x.FileName);
References(x => x.ImageGallery).Column("GalleryId");
}
}