我有一个相当简单的数据库:
表NamedItem
列:
Id(PK)
国家(字符串)
类别(字符串)
MainName(字符串)
表AlternateNames
列:
NamedItemId(FK to NamedItem.Id)
AlternateName(字符串)
我希望将以下类和枚举映射到这两个表:
enum国家{德国,英格兰,西班牙} // DB中的枚举值和国家/地区字符串的名称必须相同
枚举类别{A,B,C} // DB中枚举值和类别字符串的名称必须相同
class Item {Guid ID {get; set;} ItemNames Names {get; set;}}
class ItemNames {string MainName {get; set;} IList <
string >
AlternateNames {get;设置;}}
更新:
重要的不是枚举,而是包含来自两个不同表的部分的类ItemNames,它们位于其中一个表的实体中。
这可能与NHibernate一起使用,最好是使用Fluent NHibernate吗? 如果是这样,请给我一个快速启动。我无法弄明白,怎么做。
亲切的问候,
丹尼尔
P.S。我在Microsoft实体框架论坛中发布了相同的问题,询问是否可以使用EF4。根据答案,我将选择我将使用的框架。万一有人想知道......
答案 0 :(得分:1)
只需将类映射为正常的字符串数据类型。 NH将调用值的ToString方法,实际上将枚举的文本值保存到数据库中。
因此您的映射可能类似于:
public partial class ItemMap : ClassMap< Item >
{
Table( "NamedItem" ) ;
Id(x => x.Id, "Id" )
.Not.Nullable()
.GeneratedBy.Guid();
Map( x => x.Country )
.Column( "Country" )
.Not.Nullable( )
.Length( 255 ) ;
Map( x => x.Category )
.Column( "Category" )
.Not.Nullable( )
.Length( 255 ) ;
...
HasMany< ItemName >( x => x.ItemNames )
.KeyColumns.Add( "NamedItemId" )
.Table( "AlternateNames" )
.LazyLoad( )
.Cascade.None( )
.AsSet() ;
...
}
和类似
的类public class Item
{
public virtual Guid Id { get; set; }
public virtual CountryType Country { get; set; }
public virtual CategoryType Category { get; set; }
...
public virtual ISet< ItemNames > AlternateNames {get; set;}
...
}
我将集合设置为集合,因为它会阻止集合中的重复项,这有时会导致问题。