orm - Fluent NHibernate referencing entity with natural key -
orm - Fluent NHibernate referencing entity with natural key -
i'm using fluent nhibernate automapping functionality. i've managed database mappings pretty close using conventions, there few things need iautomappingoverride.
in legacy system, have entity class, 'campus', has natural key, 'code'. oracle database type of key varchar2(3 byte). i'm using override this, conventions otherwise assume autogenerated surrogate key. have other entity classes (e.g. building) reference campus entity (with natural key) shown below
<class name="campus" table="campus" ... > <id name="id" type="string"> <column name="camp_code" sql-type="varchar2(3 byte)" /> <generator class="assigned" /> </id> <set name="buildings" ...> <key foreign-key="buil_camp_fk"> <column name="camp_code" /> </key> <one-to-many class="building" /> </set> ... </class> <class name="building" table="building" ... > ... <many-to-one class="campus" name="campus"> <column name="camp_code" not-null="true" /> </many-to-one> ... </class> the hbm mappings i've generated appear right using next overrides:
public class campusmappingoverride implements iautomappingoverride(of campus) public sub override(byval mapping automapping(of campus)) implements iautomappingoverride(of campus).override mapping.id(function(campus) campus.id, "camp_code").customsqltype("varchar2(3 byte)") end sub end class public class buildingmappingoverride implements iautomappingoverride(of building) public sub override(byval mapping automapping(of building)) implements iautomappingoverride(of building).override mapping.references(of campus)(function(building) building.campus, "camp_code") end sub end class however, schema export (oracle database) not correct.
create table building ( ... camp_code nvarchar2(255) not null, ... ) create table campus ( camp_code varchar2(3 byte) not null, ... primary key (camp_code) ) as can see building.camp_code nvarchar2(255), seems default string in oracle, should varchar2(3 byte).
i saw there mapping.naturalid function, i'm not sure if working correctly, because if utilize in place of id, mapping exception.
i appreciate help in how deal scenario.
kind regards, ryan.
i agree fnh should recognize column type of other side of association beingness varchar, apparently doesn't. may worthwhile inquire around @ the fnh mailing list
but in order solve current problem, think in mapping override of building, can specify type of column use, (use column() function) can right behaviour yourself.
nhibernate orm fluent-nhibernate automapping natural-key
Comments
Post a Comment