Установка CustomSqlType для ссылок - PullRequest
1 голос
/ 04 января 2011

У меня есть ситуация, когда мой первичный ключ - это char (2) в SqlServer 2008, и я хочу ссылаться на него в отношении «один ко многим», но ManyToOneBuilder (который возвращается ClassMap <>. References ( )) не имеет метода CustomSqlType (). В частности:

public class State
{
    // state FIPS code is 2 characters
    public virtual string StateCode { get; set; }
    public virtual ICollection<County> { get; set; }
}

public class County
{
    // state-county FIPS code is 5 characters
    public virtual string StateCountyCode { get; set; }
    public virtual State State { get; set; }
}
public class StateMap : ClassMap<State>
{
    public StateMap()
    {
        Id(e => e.StateCode).CustomSqlType("char(2)").GeneratedBy.Assigned();
    }
}

public class CountyMap : ClassMap<County>
{
    public CountyMap()
    {
        Id(e => e.StateCountyCode).CustomSqlType("char(5)").GeneratedBy.Assigned();
        References(e => e.State, "StateCode")
        // Here's what I want to do, but can't because the method is not 
        // implemented on the class ManyToOneBuilder:
            .CustomSqlType("char(2)");
    }
}

Есть ли способ сделать это без изменения ManyToOneBuilder? Есть ли способ автоматически сопоставить FK (т.е. County.StateCode) с правильным типом? Добавить CustomSqlType в ManyToOneBuilder тривиально, но правильно ли это делать?

Ответы [ 2 ]

1 голос
/ 23 мая 2012

Сохраните определение сопоставления как есть, добавьте определение столбца «Состояние» с помощью

.CustomSqlType("char(2)")

и установите для этого столбца Insert = false и update = false.

У меня та же проблема, и в AutoMapping я использую этот код:

mapping.Map(x => x.IdUniArticolo)
     .CustomSqlType("varchar(50)")
     .Not.Insert().Not.Update();

mapping.References(x => x.Articolo)
     .Column("IdUniArticolo").PropertyRef("IdUniArticolo");
0 голосов
/ 07 января 2011

Имейте в виду, что если NHibernate сам не поддерживает его, то Fluent NHibernate не может, и я не NHibernate поддерживает ваш сценарий.У меня была похожая проблема в том, что у меня был составной ключ с двумя столбцами в таблице и в одном из полей, я хотел использовать перечислимый тип, который имел собственный IUserType, чтобы преобразовать его в соответствующее значение кода в БД.Не смог этого сделать, поэтому я застрял, сохраняя свойство строкового типа, а не перечислимого типа.

...