ПОСЛЕ РЕДАКТИРОВАНИЯ - см. Редактирование ниже
У меня есть вопрос об Automapping FLuent, который используется как часть архитектуры Sharp. Выполнение одного из тестовых примеров создаст схему, которую я могу использовать для создания таблиц в моей БД.
Я разрабатываю сайт с сообщениями и тегами, связанными с этими сообщениями. Я хочу, чтобы тег мог быть связан с более чем одним сообщением, и чтобы каждое сообщение имело 0 или более тегов.
Я хочу получить схему БД:
Post {Id, Title, SubmitTime, Content}
Tag {Id, Name}
PostTag {PostId, TagId}
Вместо этого я получаю:
Post {Id, Title, SubmitTime, Content}
Tag {Id, Name, PostID (FK)}
Я использую четкую архитектуру, и пусть классы выглядят следующим образом (более или менее):
public class Post : Entity
{
[DomainSignature]
private DateTime _submittime;
[DomainSignature]
private String _posttitle;
private IList<Tag> _taglist;
private String _content;
public Post() { }
public Post(String postTitle)
{
_submittime = DateTime.Now;
_posttitle = postTitle;
this._taglist = new List<Tag>();
}
public virtual DateTime SubmitTime { get { return _submittime; } private set { _submittime = value; } }
public virtual string PostTitle { get { return _posttitle; } private set { _posttitle = value; } }
public virtual string Content { get { return _content; } set { _content = value; } }
public virtual IList<Tag> TagList { get { return _taglist; } set { _taglist = value; } }
public class Tag : Entity
{
[DomainSignature]
private String _name;
public Tag() { }
public Tag(String name)
{
this._name = name;
}
public virtual String Name
{
get { return _name; }
private set { _name = value; }
}
public virtual void EditTagName(String name)
{
this.Name = name;
}
}
Я могу понять, почему он не подходит для установленной схемы БД, поскольку есть моменты, когда объект может существовать только как часть другого. Но тег может существовать отдельно.
Как бы я пошел для достижения этого? Я довольно новичок в архитектуре MVC, Nhibernate, SHarp и т. Д., Поэтому любая помощь будет принята с благодарностью!
EDIT *
Хорошо, теперь я немного скорректировал свои занятия. Моя проблема заключалась в том, что я ожидал, что промежуточная таблица будет выведена. Вместо этого я понимаю, что должен создать это.
Итак, теперь у меня есть (я немного упростила классы для удобства чтения.
class Post : Entity
{
[DomainSignature]
String Title
[DomainSignature]
DateTime SubmitTime
IList<PostTag> tagList
}
class Tag : Entity
{
[DomainSignature]
string name
}
class PostTag : Entity
{
[DomainSignature]
Post post
[DomainSignature]
Tag tag
}
Это дает мне схему для промежуточного объекта вместе с обычными таблицами Post и Tag:
PostTag{id, name, PostId(FK)}
Проблема с вышесказанным в том, что он все еще не включает внешний ключ для тега. Кроме того, должен ли он действительно иметь столбец идентификаторов, так как это реляционная таблица? Я думаю, это действительно составной ключ, состоящий из PK из таблиц Post и Tag.
Я уверен, что добавив в класс Tag
IList<PostTag> postList
Я получу еще один FK, добавленный в схему PostTag, но я не хочу добавлять вышеупомянутый, поскольку postList может быть огромным. Мне это не нужно каждый раз, когда я вношу сообщение в систему. У меня был бы отдельный запрос для расчета такого рода информации.
Может кто-нибудь помочь мне решить эту последнюю часть? Спасибо за ваше время.