Автоматическое сопоставление класса со свойством, полученным из Списка <T> - PullRequest
1 голос
/ 17 августа 2011

У меня есть класс, для которого я пытаюсь использовать функцию Automapping в Fluent.

У класса есть список объектов, которые содержатся в специальном классе, который содержит список.В основном он написан для обработки автоматической блокировки Списка через различные потоки.

В основном вот аналогичный макет:

public class Garage
{
    private MutexList<Vehicles> vehicles = new MutexList<Vehicles>();
    public virtual MutexList<Vehicles> Vehicles
    {
        get { return vehicles;  }
        set { vehicles = value; }
    }
}

public class MutexList<T>
{
        private List<T> list = new List<T>();
        private readonly int timeout = 1000;

        public List<T> List
        {
            get { return list;  }
            set { list = value; }
        }
}

Вот мой вызов автоматического сопоставления:

        try
        {
            var cfg = new StoreConfiguration();

            var _factory = Fluently.Configure()
                .Database(
                    MsSqlConfiguration
                        .MsSql2008
                        .ConnectionString("Server=192.168.0.115;Initial Catalog=EMTRAC3;User ID=EMCollector;Password=9o0(O);")
                        .ShowSql()
                )
                .Mappings(m =>
                    m.AutoMappings.Add(
                        AutoMap.AssemblyOf<Product>(cfg)
                    ).ExportTo(@"C:\Temp\Fluent")
                )

                .BuildConfiguration()
                .BuildSessionFactory();

        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }

И, наконец, вот функция ShouldMap, которую я не совсем уверен, зачем мне это вызывать, но без нее я ничего не отображаю:

    public class StoreConfiguration : DefaultAutomappingConfiguration
    {
        public override bool ShouldMap(Type type)
        {

            return
                type.Name == "Garage"
                || type.Namespace.Contains("Mutex");
        }
    }

Может кто-нибудь сказать мне, что я должен сделать, чтобыбыть в состоянии сопоставить класс гаража со всеми транспортными средствами, содержащимися в списке транспортных средств?Я пытаюсь использовать AutoMapping для генерации XML-схемы для NHibernate, но мне не повезло, когда я выясняю, как выполнить сопоставление списка, содержащегося в классе, таким образом.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Вы не можете отобразить пользовательский класс коллекции из коробки.

Это очень ясно в Глава 6. Отображение коллекции :

Требуется NHibernateчтобы постоянные коллекционные поля были объявлены как тип интерфейса [...] Фактический интерфейс может быть Iesi.Collections.ISet, System.Collections.ICollection, System.Collections.IList, System.Collections.IDictionary, System.Collections.Generic.ICollection<T>, System.Collections.Generic.IList<T>, System.Collections.Generic.IDictionary<K, V>,Iesi.Collections.Generic.ISet<T> или ... все что угодно!(Где «все, что вам нравится» означает, что вам придется написать реализацию NHibernate.UserType.IUserCollectionType.)

1 голос
/ 17 августа 2011

Хотя я еще не пробовал, я считаю, что следующий код должен автоматически отобразить карту без проблем.(Однако, не уверен насчет закрытого члена timeout)

Кроме того, я добавил свойство Id в оба класса, чтобы вы могли исключить переопределение «ShouldMap».

public class Garage
{
    public virtual int Id { get; private set; }

    public virtual MutexList<Vehicles> Vehicles { get; set; }

    public Garage()  
    { 
        Vehicles = new MutexList<Vehicles>(); 
    }
}

public class MutexList<T>
{
    public virtual int Id { get; private set; }

    // Not sure if this will be persisted
    private readonly int timeout = 1000;

    public virtual IList<T> List { get; set; }

    public MutexList<T>()
    {
        List = new List<T>();
    }

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