Пользовательский тип карты в FluetnNhibernate - PullRequest
2 голосов
/ 29 июля 2011

У меня есть 2 класса.

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Person
{
    public virtual Name Name { get; set; }
    public virtual int Age { get; set; }
}

Я хочу отобразить Person в базу данных следующим образом:

| First Name | LastName | Age |

Я пытался создать реализацию IUserType для Name.Но здесь

public SqlType[] SqlTypes
    {
        get { return new[] { new SqlType(DbType.String), new SqlType(DbType.String) }; }
    }

У меня есть исключение

property mapping has wrong number of columns

1 Ответ

3 голосов
/ 29 июля 2011

То, что вы на самом деле просите, это Компонент:

https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping#componentmap

Ваши карты классов будут выглядеть так:

public class NameComponent : ComponentMap<Name>
{
    public NameComponent()
    {
        Map(x => x.FirstName);
        Map(x => x.LastName);
    }
}

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id)...
        Map(x => x.Age);
        Component(x => x.Name);
    }
}

Это сопоставит FirstName / LastName с одной и той же таблицей персонажа как два отдельных столбца. Но дайте вам один объект Name на вашей персоне.


Если вам нужно автоматически составить карту компонента, взгляните на этот блог:

http://jagregory.com/writings/fluent-nhibernate-auto-mapping-components/

...