Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# ASP.NET MVC

Войти
Регистрация
Восстановить пароль
 
Mr_Ser_Win
44 / 43 / 3
Регистрация: 15.10.2008
Сообщений: 320
#1

EntityFramework, Navigation property: реализовать посты и комментарии к ним - C# MVC

05.11.2015, 18:25. Просмотров 543. Ответов 8
Метки нет (Все метки)

пытаюсь реализовать посты и комменты к ним.
соответственно два класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public class Post
    {
        [Key]
        public int Id { get; set; }
 
        public string Message { get; set; }    
        public DateTime DatePosted { get; set; }
 
        public virtual ICollection<Comment> Comments { get; set; }
        public virtual ApplicationUser UserTo { get; set; }
        public virtual ApplicationUser UserFrom { get; set; }
    }
и

C#
1
2
3
4
5
6
7
8
9
public class Comment
    {
        [Key]
        public int Id { get; set; }
        public string Message { get; set; }             
        public DateTime DatePosted { get; set; }
        public virtual Post ParentPost { get; set; }
        public virtual ApplicationUser UserFrom { get; set; }
    }
пока у меня только посты, все как бы ок. стоит добавить хоть один комментарий к посту, данные от сервера не летят. ошибка 500

предполагаю что что то с Navigation property, т.к. вначале когда подключал юзеров (фром и ту) было чтото подобное.

Добавлено через 9 минут
вот такая ошибка от сервера
the server responded with a status of 500 (Internal Server Error)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2015, 18:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос EntityFramework, Navigation property: реализовать посты и комментарии к ним (C# MVC):

EntityFramework 5.0 и partial property и MySql - C# ASP.NET
Всем привет. База MySql, EntityFramework 5.0. Есть несколько таблиц с названием картинки. В коде c# прописываю пути к этим картинкам с...

.NET 4.x EntityFramework: Custom setter/getter for EntityObject property - C#
Почитав Интернету - понял, довольно таки нетривиальная задача для реализации сабджа. Поделитесь, пожалуйста, знаниями кто как реализовывал...

Подскажите как реализовать задачу с Navigation Drawer - Программирование Android
Снова всем привет.очередной ламерский вопрос. Есть один активити, в нем я реализовал получение с кнопки операнда или оператора.Т.е. в...

Реализовать шаблонный класс property - C++
Необходимо реализовать шаблонный класс property, реализующийся на С++ станд. средствами вообще не знаю как делать(((

Создание приложения которое будет выгружать базу звонков и ставить комментарии к ним - Программирование Android
Привет всем форумчанам, в создании приложений да и программировании совсем новичок, но сейчас выпал шанс попасть в студию стажером. Для...

Надо реализовать что-то типа Property Page на форме - Visual Basic
Надо реализовать что-то типа Property Page на форме, т.е. на каждом табе было своя тусовка контролов и при клике появлялись именно они?

8
Metall_Version
2116 / 1253 / 415
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
05.11.2015, 19:23 #2
Цитата Сообщение от Mr_Ser_Win Посмотреть сообщение
вот такая ошибка от сервера
а какой текст ошибки и стек трейс?
если аяксом дергаете этот метод то текст можно глянуть во вкладке Network (на том запросе который получил 500) консоли разработчика в браузере

если нет то текст должен быть на странице (если в веб конфиге customErrors установлен = false )
0
Mr_Ser_Win
44 / 43 / 3
Регистрация: 15.10.2008
Сообщений: 320
05.11.2015, 19:38  [ТС] #3
вот такое выджернул из стека
Message: "An error has occurred.",…}
ExceptionMessage: "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'."
ExceptionType: "System.InvalidOperationException"
InnerException: {Message: "An error has occurred.",…}
ExceptionMessage: "Self referencing loop detected for property 'ParentPost' with type 'System.Data.Entity.DynamicProxies.Post_728635AE2C41B275D907D673B236E64FFAD47F104A7C3AC0701231791CD7E412'. Path '[0].Comments[0]'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"
Message: "An error has occurred."
StackTrace: " at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
↵ at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
↵ at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
↵ at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)
↵ at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)
↵ at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)
↵ at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
↵--- End of stack trace from previous location where exception was thrown ---
↵ at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
↵ at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
↵ at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()"
Message: "An error has occurred."
StackTrace: null
0
Metall_Version
2116 / 1253 / 415
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
05.11.2015, 20:09 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Mr_Ser_Win, циклическая ссылка самого на себя, как видно в модели собственно
"Self referencing loop detected for property 'ParentPost' with type 'System.Data.Entity.DynamicProxies.Post_728635AE2C41B275D907D673B236E64FFAD47F104A7C3AC0701231791CD7E412'. Path '[0].Comments[0]'"

это вы в джейсон передаете?

сделайте вью модел, которые будут похожи на эти классы но без ссылки на родителя, и используйте их для обмена с клиентом
1
Mr_Ser_Win
44 / 43 / 3
Регистрация: 15.10.2008
Сообщений: 320
06.11.2015, 10:31  [ТС] #5
хм. а в чем зацикленность то? что то я не наблюдаю ее пока.

Добавлено через 1 минуту
все, нашел. комментарий, так же содержит в себе пост. вот оно и зациклилось. спасибо за решение

Добавлено через 11 часов 58 минут
Metall_Version,
еще один вопрос. я делал на основании этого примера. там тоже в комменте есть родительский объект Пост. но там то все нормально работает.
http://www.joshgreenwald.com/journal...5-and-signalr2

есть еще замечания, что не так в моем случае?
0
Metall_Version
2116 / 1253 / 415
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
06.11.2015, 11:05 #6
покажите код ваш.
и версия EF такая-же как в примере?
0
Mr_Ser_Win
44 / 43 / 3
Регистрация: 15.10.2008
Сообщений: 320
06.11.2015, 11:13  [ТС] #7
Metall_Version,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public class PostsController : ApiController
    {
        private ApplicationDbContext _ctx;
        
        public PostsController()
        {
            this._ctx = new ApplicationDbContext();
        }
 
        // GET api/<controller>
        public IEnumerable<Post> Get()
        {
            return this._ctx.Posts.OrderByDescending(
                x => x.DatePosted
                ).ToList();
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 public class BoardHub : Hub
    {
       // [Authorize]
        public void WritePost(string message, string from, string to)
        {
            var ctx = new ApplicationDbContext();
            if (message.Trim().Length == 0)
            {
                //throw new Exception("message cannot be empry");
                return;
            }
 
           var ufrom = ctx.Users.Find(from);
           var uto = ctx.Users.Find(to);
            var post = new Post { Message = message, UserTo = uto, UserFrom = ufrom, DatePosted = DateTime.Now };
            ctx.Posts.Add(post);
            ctx.SaveChanges();
 
            Clients.All.receivedNewPost(post.Id, post.UserTo, post.UserFrom, post.Message, post.DatePosted);
        }
 
      //  [Authorize]
        public void AddComment(int postId, string comment, string username, string from)
        {
            var ctx = new ApplicationDbContext();
            var post = ctx.Posts.FirstOrDefault(p => p.Id == postId);
 
            if (post != null)
            {
                var ufrom = ctx.Users.Find(from);
                var newComment = new Comment { ParentPost = post, Message = comment,/* UserCommentFrom = ufrom, */DatePosted = DateTime.Now };
                ctx.Comments.Add(newComment);
                ctx.SaveChanges();
 
                Clients.All.receivedNewComment(newComment.ParentPost, newComment.Id, newComment.Message, /*newComment.UserCommentFrom*/"SERVIN", newComment.DatePosted);
            }                                                 
        }
    }
какой код еще интересен?
с версией EF не уверен, но все работало нормально, до недавних пор. заметил косяки после добавления юзеров(фром, ту), после пошли изменения в комментах. ну и все.. тут и пошли косяки
0
Metall_Version
2116 / 1253 / 415
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
06.11.2015, 11:42 #8
вот в чем проблема, передаете клиенту newComment.ParentPost (35 строка), asp пытается привести этот объект в json, но не удается так как там циклическая ссылка самого на себя,
C#
1
Clients.All.receivedNewComment(newComment.ParentPost /* а нужно newComment.ParentPost.Id */ , newComment.Id, newComment.Message, /*newComment.UserCommentFrom*/"SERVIN", newComment.DatePosted);
зачем передавать объект поста если можно передать ID и этого будет достаточно

в принципе в статье так и делают
1
Mr_Ser_Win
44 / 43 / 3
Регистрация: 15.10.2008
Сообщений: 320
06.11.2015, 11:45  [ТС] #9
Metall_Version,
ваша поправка подлечила оповещение ЮИ. а с зацикливанием нашел другое решение
C#
1
            GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Re*​ferenceLoopHandling = ReferenceLoopHandling.Ignore;
в стартапе указать надо было
0
06.11.2015, 11:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2015, 11:45
Привет! Вот еще темы с ответами:

Не получается реализовать комментарии . Код - PHP
Я уже писал про это.Я пытался по двум статьям http://myrusakov.ru/javascript-ajax-add-comments.html ...

Как реализовать комментарии на сайте - PHP
Всем привет. Я хотел бы узнать вот как сделать следующие вещи буду рад если поможете))))) 1. Возможность оставлять коментарий ( дата...

Реализовать стек и 3 оператора для работы с ним - C++
Доброго времени суток! Помогите, есть такая задача: Реализовать стек и 3 оператора для работы с ним (Push (x, S), Locate (х, S),...

Реализовать двусвязный список и операции работы с ним - C++
Реализовать двусвязный список и операции работы с ним. В списке хранить, что пожелаете. Операции: - добавить в начало. - добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru