Я хочу разработать RESTfull API, в котором нет дублирующих данных.
Вот мой контекстный класс
public class ReviewDbContext : DbContext
{
public ReviewDbContext() : base("name=Con")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ReviewDbContext, ReviewsCalculateSystem.Models.Migrations.Configuration>("Con"));
this.Configuration.LazyLoadingEnabled = false;
//this.Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
private void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
//Here some entity....
}
Я сталкиваюсь с этой ошибкой:
Типу ObjectContent`1 не удалось сериализовать тело ответа для типа контента application / xml; кодировка = UTF-8' .
И эта ошибка решена, чтобы добавить следующий код в мой файл Global.asax
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
GlobalConfiguration.Configuration.Formatters
.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
reviewerReviewForEachProductById класс обслуживания
public JsonResult reviewerReviewForEachProductById(int reviewerId, int productId)
{
var productReviewInfo = db.ReviewerTaskAsigns.Where(x => x.ReviewerId == reviewerId && x.ProductId == productId).Select(x => new { x.Product, x.ReviewCollectMargin, x.NumberOfReviewCollect }).FirstOrDefault();
//var reviewList = db.Reviews.Where(x => x.ReviewerId == reviewerId && x.ProductId == productId).ToList();
return new JsonResult
{
Data = new{productReviewInfo},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
Когда я нажимаю на вышеупомянутую службу, используя Почтальон
В приведенном выше классе обслуживания я добавляю дополнительный код, чтобы что-то сделать, и извлекаю вышеуказанную ошибку, которую я решил
public JsonResult reviewerReviewForEachProductById(int reviewerId, int productId)
{
var productReviewInfo = db.ReviewerTaskAsigns.Where(x => x.ReviewerId == reviewerId && x.ProductId == productId).Select(x => new { x.Product, x.ReviewCollectMargin, x.NumberOfReviewCollect }).FirstOrDefault();
var reviewList = db.Reviews.Where(x => x.ReviewerId == reviewerId && x.ProductId == productId).ToList();
return new JsonResult
{
Data = new{
productReviewInfo,
reviewList
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
Когда я обращаюсь к вышеуказанному сервису с помощью почтальона, я вижу много повторяющихся данных здесь
{
"productReviewInfo": {
"Product": {
"Admin": null,
"ReviewerTaskAsigns": null,
"Reviews": [
{
"Reviewer": null,
"ReviewId": 3,
"SwapmeetFbProfileLink": "B1",
"SwapmeetProductLink": "B1",
"SwapmeetReviewLink": "B1",
"OwnReviewLink": null,
"ReviewStatus": true,
"isPay": false,
"ProductId": 4,
"ReviewerId": 1
}
],
"ProductId": 4,
"ProductName": "C# Book",
"ProductAsin": "64dFDF45F",
"ProductLink": "https://www.amazon.com/Healthy-Meal-Prep-Cookbook-Wholesome-ebook/dp/B07492912F/ref=sr_1_1_sspa?s=digital-text&ie=UTF8&qid=1549435615&sr=1-1-spons&keywords=keto+meal+prep&psc=1",
"CurrentStatus": true,
"NumberOfReviewNeed": 30,
"NumberOfReviewCollect": null,
"ReviewStartDate": "2019-02-08T00:00:00",
"ReviewEndDate": null,
"AdminId": 1
},
"ReviewCollectMargin": 20,
"NumberOfReviewCollect": 1
},
"reviewList": [
{
"Product": {
"Admin": null,
"ReviewerTaskAsigns": null,
"Reviews": [],
"ProductId": 4,
"ProductName": "C# Book",
"ProductAsin": "64dFDF45F",
"ProductLink": "https://www.amazon.com/Healthy-Meal-Prep-Cookbook-Wholesome-ebook/dp/B07492912F/ref=sr_1_1_sspa?s=digital-text&ie=UTF8&qid=1549435615&sr=1-1-spons&keywords=keto+meal+prep&psc=1",
"CurrentStatus": true,
"NumberOfReviewNeed": 30,
"NumberOfReviewCollect": null,
"ReviewStartDate": "2019-02-08T00:00:00",
"ReviewEndDate": null,
"AdminId": 1
},
"Reviewer": null,
"ReviewId": 3,
"SwapmeetFbProfileLink": "B1",
"SwapmeetProductLink": "B1",
"SwapmeetReviewLink": "B1",
"OwnReviewLink": null,
"ReviewStatus": true,
"isPay": false,
"ProductId": 4,
"ReviewerId": 1
}
]
}
Модель продукта и обзор класса
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductAsin { get; set; }
public string ProductLink { get; set; }
public bool CurrentStatus { get; set; }
public int NumberOfReviewNeed { get; set; }
public int? NumberOfReviewCollect { get; set; }
public DateTime? ReviewStartDate { get; set; }
public DateTime? ReviewEndDate { get; set; }
public int AdminId { get; set; }
public virtual Admin Admin { get; set; }
public virtual ICollection<Review> Reviews { get; set; }
public virtual ICollection<ReviewerTaskAsign> ReviewerTaskAsigns { get; set; }
}
public class Review
{
public int ReviewId { get; set; }
public string SwapmeetFbProfileLink { get; set; }
public string SwapmeetProductLink { get; set; }
public string SwapmeetReviewLink { get; set; }
public string OwnReviewLink { get; set; }
public bool ReviewStatus { get; set; }
public bool isPay { get; set; }
public int ProductId { get; set; }
public virtual Product Product { get; set; }
public int ReviewerId { get; set; }
public virtual Reviewer Reviewer { get; set; }
}
Как остановить выборку дублированных данных?