Запросы к базе данных с использованием Entity Framework не работают должным образом - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть текущая таблица с именем Reviews: (Я подтвердил это непосредственно в sql)

Id  Name            Summary         Rating
1   Reviewer one    Review one.     2.5
1   Reviewer two    Review two.     1.5
1   Reviewer three  Review three.   3.9

Я пытаюсь получить все 3 отзыва, используя id == 1, который является внешним ключом, но в результате я получаю первый отзыв 3 раза:

Id  Name            Summary         Rating
1   Reviewer one    Review one.     2.5
1   Reviewer one    Review one.     2.5
1   Reviewer one    Review one.     2.5

Что-то не так с моим кодом?

public List<Review> GetReviewModels(int restaurantId)  //restaurantId is 1
{
    List<Review> reviews = new List<Review>();
    using (var db = new ReviewEntities())
    {
        reviews = db.Reviews.Where(e => e.id.Equals(restaurantId)).ToList();
    }
    return reviews;
}

А вот модель обзора сущности:

public partial class Review
{
    public int id { get; set; }
    public string Username { get; set; }
    public string Summary { get; set; }
    public double Rating { get; set; }

    public virtual Restaurant Restaurant { get; set; }
}

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Изменение

reviews = db.Reviews.Where(e => e.id.Equals(restaurantId)).ToList();

на

reviews = db.Reviews.AsNoTracking().Where(e => e.id.Equals(restaurantId)).ToList();

решило проблему

0 голосов
/ 24 апреля 2018

Вы можете попробовать это другим способом.Как ссылки на таблицу отзывов Идентификатор таблицы ресторана, так и модель сущности ресторана будет иметь список отзывов, поэтому для того, чтобы получить все отзывы для идентификатора ресторана 1, необходимо: Это класс Модель обзора.

 public partial class Review
 {
    public int id { get; set; }
    public string Username { get; set; }
    public string Summary { get; set; }
    public double Rating { get; set; }

   public virtual Restaurant Restaurant { get; set; }
 }

ЭтоМодель ресторана класса

public partial class Restaurant
{
  public int Id{get;set;}
  //Rest all other fields.

  //Foreign key relationship/ Navigation property
  public List<Reviews> Reviews {get;set;}
} 

И код функции выглядит следующим образом:

public List<Review> GetReviewModels(int restaurantId)  //restaurantId is 1
{
   List<Review> reviews = new List<Review>();
   using (var db = new RestaurantEntity())
   {
      reviews = db.Restaurant.Where(e => e.id==restaurantId).Select(x=> 
      x.Reviews).FirstOrDefault();
   }
   return reviews;
}
0 голосов
/ 24 апреля 2018

Ваша проблема в вашей таблице / модели Ваша модель должна выглядеть следующим образом:

public partial class Review
{
    public int id { get; set; }
    public string Username { get; set; }
    public string Summary { get; set; }
    public double Rating { get; set; }
    public int RestaurantId {get;set;}

    public virtual Restaurant Restaurant { get; set; }
}

И вам нужно будет добавить это к вашему Sql:

ALTER TABLE Reviews
DROP CONSTRAINT /*Name of Id fied constraint here*/ 

-- on a side note, you may have to Drop foreign key depending on the way it is in the database

ALTER TABLE Reviews
ALTER COLUMN Id INT NOT NULL PRIMARY KEY IDENTITY(1,1)

ALTER TABLE Reviews
ADD COLUMN RestrauntId INT NOT NULL /*you can make this null if you need*/ FOREIGN KEY FK_Reviews_TO_Restraunt REFERENCES Restraunt(Id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...