У меня есть этот класс картостроителя. Я не эксперт в ленивой загрузке, поэтому не могли бы вы объяснить мне, почему иногда это работает, а иногда нет. (Идентификатор местоположения является проблемой)
public static class LocationMapper
{
public static IEnumerable<DropDownItemView> ConvertToLocationViews
(this IEnumerable<Location> Locations)
{
return Mapper.Map<IEnumerable<Location>, IEnumerable<DropDownItemView>>(Locations);
}
public static LocationFewDetailsView ConvertToLocationFewDetailsView(this Location loc)
{
LocationFewDetailsView location = new LocationFewDetailsView();
location.CityName = loc.City.Name; //The lazy loading works here
location.LocationId = loc.Id; // *But not here. The id is 0. What could be the problem?*
location.LocationName = loc.Name; //The lazy loading works here
return location;
}
}
Класс отображения:
using System;
using System.Collections.Generic;
using System.Text;
using FluentNHibernate.Mapping;
using Unde.Mergem.Model.EntityClasses;</p>
<p>namespace Unde.Mergem.Repository.NHibernate.Mappings
{
/// Represents the mapping of the 'Location' entity, represented by the 'Location' class.
public partial class LocationMap : ClassMap
{
/// Initializes a new instance of the class.
public LocationMap()
{
Table("[dbo].[LocationSet]");
OptimisticLock.None();
LazyLoad();</p>
<code> Id(x=>x.Id)
.Access.CamelCaseField(Prefix.Underscore)
.Column("[Id]")
.GeneratedBy.Identity();
Map(x=>x.Address).Column("[Address]").Not.Nullable().Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.Capacity).Column("[Capacity]").Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.Description).Column("[Description]").Not.Nullable().Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.Map).CustomType("BinaryBlob").Column("[Map]").Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.MapUrl).Column("[MapURL]").Not.Nullable().Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.Name).Column("[Name]").Not.Nullable().Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.Website).Column("[Website]").Not.Nullable().Access.CamelCaseField(Prefix.Underscore);
References(x=>x.City)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.All()
.Fetch.Select()
.Columns("[CityId]");
HasMany(x=>x.Events)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.AllDeleteOrphan()
.Fetch.Select()
.Inverse()
.LazyLoad()
.KeyColumns.Add("[LocationId]");
References(x=>x.Host)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.All()
.Fetch.Select()
.Columns("[HostId]");
AdditionalMappingInfo();
}
/// <summary>Partial method for adding additional mapping information in a partial class.</summary>
partial void AdditionalMappingInfo();
}
</code>
}