2011-01-03 3 views
1

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

ответ

0

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

1

Держите ваше определение отображения как есть, добавить «State» определение столбца с

.CustomSqlType("char(2)") 

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

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

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

mapping.References(x => x.Articolo) 
    .Column("IdUniArticolo").PropertyRef("IdUniArticolo"); 
Смежные вопросы