Простая проблема с отложенной загрузкой? Свободный NHibernate - PullRequest
0 голосов
/ 26 мая 2011

У меня есть этот класс картостроителя. Я не эксперт в ленивой загрузке, поэтому не могли бы вы объяснить мне, почему иногда это работает, а иногда нет. (Идентификатор местоположения является проблемой)


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>

}


1 Ответ

0 голосов
/ 27 мая 2011

Если я могу дать вам предложение, я бы избегал использовать ленивую загрузку в веб-среде, поскольку это снижает производительность.

взгляните на:

Когда следует избегатьиспользуя функцию отложенной загрузки NHibernate?

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