Я использую NHibernate в какой-то системе, и я очень доволен тем, как это работает, но я думал, что мне нужно будет переключиться с NHibernate и помещать Entity Framework исключительно для обучения , Однако есть проблема, которую я наткнулся, хотя, в моем домене у меня есть 2 классов (несколько упрощенных примеров)Entity Framework, влияющий на мой домен
public class Post
{
public Post()
{
Comments = new List<Comment>();
}
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Text { get; set; }
public virtual DateTime DatePosted { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public virtual int Id { get; set; }
public virtual string CommentText { get; set; }
public virtual Post Post { get; set; }
}
отображений для этой работы хорошо, когда я использую NHibernate, я могу вполне счастливо траверс между моим Отношения один к многим, комментарии ленивы загружены как ожидалось, и все это хорошо.
Но при переходе к EntityFramework, чтобы отношения работали, мне нужно изменить класс Comment, чтобы включить PostId-поле, а также объект Post, чтобы получить отношения как таковые.
public class Comment
{
public virtual int Id { get; set; }
public virtual string CommentText { get; set; }
public virtual int PostId { get; set; } // added in for entityframework
public virtual Post Post { get; set; }
public virtual int UserId { get; set; }
}
С помощью этого поля добавляется в мой домен объекта отображения теперь, кажется, работает, но я чувствую себя немного неловко об этом, как он чувствует, как Entityframework если заставляет меня изменить свой домен, и я был под впечатлением, что доменная модель не должна знать ничего о сохранении.
Мне действительно нужно это дополнительное поле PostId, добавленное в мой класс комментариев, чтобы заставить отношения работать, или я делаю что-то неправильно?
Могу ли я быть педантичным в отношении того, что на домен влияет изменение уровня персистентности?
Не имеет полей Post и PostId вместе, как это означает, что если вы измените PostId, вам также придется обрабатывать изменение для обновления поля Post или наоборот в классе Comment?
Благодаря
CD
При создании модели данных в EF вы можете отменить «Включить столбцы внешнего ключа в модели». Однако из памяти это означает, что EF, возможно, придется перейти в БД, чтобы получить Comment.Post.Id, тогда как в NH это не – Rippo
Я не использовал модель данных генерации, мой домен уже был построен, поскольку он работал с существующим db через NHibernate раньше, я унаследовал класс DbContext и добавил любые сопоставления, которые могут возникнуть в переопределении метода OnModelCreating. –
Есть ли причина, по которой 'Post' не является агрегированным корнем? Выполняет ли 'Post' какие-либо инварианты в своих комментариях? – JefClaes