Setting CustomSqlType on References

一个人想着一个人 提交于 2020-01-16 06:12:49

问题


I have a situation where my primary key is a char(2) in SqlServer 2008, and I want to reference it in a one-to-many relationship, but the ManyToOneBuilder (which is returned by ClassMap<>.References()) doesn't have a CustomSqlType() method. Specifically:

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)");
    }
}

Is there any way to accomplish this without modifying the ManyToOneBuilder? Is there a way to automatically map the FK (i.e. County.StateCode) to the correct type? It's trivial to add CustomSqlType to ManyToOneBuilder, but is that the right thing to do?


回答1:


Keep your mapping definition as is, add your "State" column definition with

.CustomSqlType("char(2)")

and set for this column Insert=false and update=false.

I've the same problem and in AutoMapping I use this code:

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

mapping.References(x => x.Articolo)
     .Column("IdUniArticolo").PropertyRef("IdUniArticolo");



回答2:


Keep in mind that if NHibernate itself doesn't support it, then Fluent NHibernate can't, and I don't NHibernate supports the scenario you have. I had a similar problem in that I had a 2 column composite key on a table and on one of the fields, I wanted to use an enumerated type which had a custom IUserType to translate it to its appropriate code value in the DB. Couldn't do it, so I was stuck keeping the property of the string type rather than the enumerated type.



来源:https://stackoverflow.com/questions/4588885/setting-customsqltype-on-references

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!