我希望有人可以幫助我,我想寫一個類的子類映射到泛型類的映射類。它更容易使用代碼來descibe,所以這裏是我的模型......幫助流利的NHibernate映射泛型類
public abstract class TagBase
{
public virtual int Id { get; private set; }
public virtual TagTypeEnum TagType { get; set; }
public virtual string Value { get; set; }
public virtual bool IsSystemTag { get; private set; }
public virtual bool isDeleted { get; set; }
public TagBase()
{
}
public TagBase(TagTypeEnum tagType)
{
this.TagType = tagType;
}
public override string ToString()
{
return Value;
}
}
public class Tag<TLinkedItem> : TagBase where TLinkedItem : ITagged<TLinkedItem>
{
public virtual List<TLinkedItem> LinkedItems { get; set; }
}
正如你可以看到Tag
是通用的,但被限制在那些實施ITagged<T>
的想法是,一個實體類標籤又有一個標籤有一個強類型的LinkedItem列表。
標籤不能提供各種不同的實體的共享
我只有兩個實體在我的模型,支持標籤到目前爲止大公被Display
和Asset
我試着用下面的流利映射此NHibernate代碼;
public class TagBaseMap : ClassMap<TagBase>
{
public TagBaseMap()
{
Table("Tag");
Id(tag => tag.Id);
Map(tag => tag.Value).Not.Nullable().Length(50);
Map(tag => tag.IsSystemTag).Not.Nullable();
Map(tag => tag.isDeleted).Not.Nullable();
Map(tag => tag.TagType).CustomType<Int32>().Not.Nullable();
}
}
public class DisplayTagMap : SubclassMap<Tag<Display>>
{
public DisplayTagMap()
{
HasManyToMany(displayTag => displayTag.LinkedItems).Inverse().Table("DisplayTagLink");
}
}
public class AssetTagMap : SubclassMap<Tag<Asset>>
{
public AssetTagMap()
{
HasManyToMany(assetTag => assetTag.LinkedItems).Inverse().Table("AssetTagLink");
}
}
當我嘗試並建立數據庫,我靶向SQL服務器,從這個映射我得到這個錯誤「附近有語法錯誤''。」
我說得對不對由泛型類即淨的命名思維造成的,
「{[Model.Tag'1 [Model.Asset,型號,版本= 1.0.0.0,文化=中立,PublicKeyToken = null]]。LinkedItems,NHibernate.Mapping.Bag(Model.Tag'1 [[Model.Asset,Saturn.ConnectVision.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]] .LinkedItems)]}'
我在這裏做點什麼嗎?
有沒有辦法解決這個問題?
在此先感謝您的任何建議。