Я надеюсь, что кто-то может мне помочь, я пытаюсь написать классы сопоставления для класса, который подклассифицирован в общий класс. Его легче описав с кодом, так вот моя модель ...Help Fluent NHibernate Mapping Generic Class
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, от этого отображения я получаю эту ошибку «Неправильный синтаксис около„'.“»
Am I прямо в мышление, вызванное именовании .NET в общих классах т.е.
«{[Model.Tag'1 [[Model.Asset, модель, Version = 1.0.0.0, Culture = (Model.Tag'1 [[Model.Asset, Saturn.ConnectVision.Model, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]]. .LinkedItems)]}
Я делаю что-то глупое здесь?
Есть ли способ обойти эту проблему?
Заранее благодарим за любые советы.