Я надеюсь, что кто-нибудь может помочь мне с этим, я пытаюсь написать классы отображения для класса, который подклассифицирован в общий класс.Проще описать код, поэтому вот моя модель ...
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>
Идея заключается в том, что у сущности есть теги, а в свою очередь у тега есть список строго типизированных LinkedItems.
Теги не могут быть общими для разных типов сущностей
У меня есть только две сущностив моей модели, поддерживающей тегирование, пока 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 = нейтральный, PublicKeyToken = null]].LinkedItems, NHibernate.Mapping.Bag ( Model.Tag'1 [[Model.Asset, Saturn.ConnectVision.Model, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null]]. LinkedItems)]} '
Я что-то тут делаю глупо?
Есть ли способ обойти эту проблему?
Заранее спасибо за любые советы.