少し奇妙なエラーが発生し、少し困惑したので、絵を描いてみましょう。
家のレビューでデータベースを更新するコントローラーがあります。家が存在しない場合は、家を作成してから更新します。
したがって、これは家が存在しない場合のコードです。
if (checkHouse == null)
{
var department = db.Universitys.Single(d => d.universityName == "NotSet");//make dynamic
var hws = new House();
hws.address1 = reviewmodelview.Address1;
hws.address2 = reviewmodelview.Address2;
hws.postCode = reviewmodelview.postCode;
hws.noOfDisputes = 0;
department.Houses.Add(hws);
db.SaveChanges(); //created the house and saved the changes, now apply the review to it.
var theHouse = db.Houses.Single(d => d.address1 == reviewmodelview.Address1);//findhouse
var rvw = new Review(); //create review
rvw.condition = reviewmodelview.condition;
rvw.furniture = reviewmodelview.furniture;
rvw.overall = reviewmodelview.overall;
rvw.isApproved = false;
rvw.review = reviewmodelview.review;
rvw.user = User.Identity.Name;
rvw.reviewDate = DateTime.Now;
theHouse.Reviews.Add(rvw);
db.SaveChanges();
}
家が存在するかどうかのコードは次のとおりです。
else
{
var theHouse = db.Houses.Single(d => d.address1 == reviewmodelview.Address1);//findhouse
var rvw = new Review();//create review
rvw.condition = reviewmodelview.condition;
rvw.furniture = reviewmodelview.furniture;
rvw.overall = reviewmodelview.overall;
rvw.isApproved = false;
rvw.review = reviewmodelview.review;
rvw.user = User.Identity.Name;
rvw.reviewDate = DateTime.Now;
theHouse.Reviews.Add(rvw);
db.SaveChanges();
}
問題はこれです。家が存在する場合は、レビューが追加されます。家が存在しない場合、家はデータベースに追加されますが、コードは次の場所で壊れます。
theHouse.Reviews.Add(rvw);
また、マウスを[レビュー]に合わせると、nullと表示されます。エラーは「オブジェクト参照がオブジェクトのインスタンスに設定されていません」です。
ただし、もう一度試してみると、今回はデータベースにすでに存在する家の住所を追加し、にブレークポイントを追加します。
theHouse.Reviews.Add(rvw);
それは言う:{System.Data.Objects.DataClasses.EntityCollection<Data.Manager.Review>}
2つの同一のコードについて、レビューコレクションがnullである理由がわかりません。
家のモデルはこれです:
namespace Data.Manager
{
public class House
{
public virtual int HouseID { get; set; }
public virtual string postCode { get; set; }
public virtual string address1 { get; set; }
public virtual string address2 { get; set; }
public virtual int noOfDisputes { get; set; } //number of disputes added by tennants
public virtual int averageRating { get; set; }
public virtual ICollection<Review> Reviews { get; set; }
}
}
なぜそうなっているのか説明が取れたら、いつまでもあなたを愛していきたいと思います。