【发布时间】:2011-03-02 17:54:10
【问题描述】:
我希望有人可以帮助我解决这个问题,我正在尝试为一个子类化为泛型类的类编写映射类。用代码更容易描述,所以这是我的模型......
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
我尝试使用以下 Fluent 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 Server,从这个映射中我收到了这个错误“'`' 附近的语法不正确。”
.Net 对泛型类的命名引起的思考是否正确,即,
'{[Model.Tag'1[[Model.Asset, Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].LinkedItems, NHibernate.Mapping.Bag( Model.Tag'1[[Model.Asset, Saturn.ConnectVision.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].LinkedItems)]}'
我在这做傻事吗?
有没有办法解决这个问题?
提前感谢您的任何建议。
【问题讨论】:
标签: generics fluent-nhibernate