私は1対多の関係を持つ2つのクラスのCompanyとVisitorを扱っています。MVC EF:IDで複数のコンポーネントを追加する
public class Company
{
public int CompanyID { get; set; }
public string CompanyName { get; set; }
public virtual ICollection<Visitor> Visitors { get; set; }
}
public class Visitor
{
public int VisitorID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int CompanyID { get; set; }
public bool SendNewsletter { get; set; }
public virtual Company Company { get; set; }
}
私は訪問者が自分に関する情報を記入できるページを持っています。アイデアは、会社がデータベースにない場合、それがリストに追加されるということです。会社名が入力されたCompanyNameがdbの名前と一致する場合、会社はVisitorに関連付けられ、必要な情報が四捨五入され、それが独自のdbに追加されます。
var companyExists = db.Companies.Any(c => c.CompanyName == visitor.Company.CompanyName);
if(companyExists)
{
var existingCompany = db.Companies.SingleOrDefault(c => c.CompanyName == visitor.Company.CompanyName);
visitor.CompanyID = existingCompany.CompanyID;
visitor.Company = existingCompany;
}
db.Visitors.Add(visitor);
db.SaveChanges();
このコードは機能しますが、冗長なようです。私はビジターのCompanyIDを既存の会社に関連させ、その後同じことを会社に行っています。私が読んだことは、Visitor's CompanyIDの更新は十分であるはずですが、existingCompanyをVisitor's Companyパラメータにマップしないと、2番目のCompanyIDが作成されます。私はいくつかの重要な点を見逃しているように感じ、ここの誰かが私に正しい方向を向けることを望んでいる。
返信ありがとうございました。私はあなたが示唆したことを試しましたが、Visitor.CompanyIDと一致しないVisitor.Company.CompanyIDの新しいIDが作成されています。 2つをリンクする簡単な方法はありますか?私はそれが怠惰な読み込みだと思ったので、私はそれを有効にし、変更はありませんでした。 –
@Yusif_Nurizadeコードのブロックに 'visitor'と' Company'を追加していますか? –
アリ・ソルタニは、あなたが何を意味するかを明確にしていただけますか?どのようなコードブロックですか?私は上に既存のコードを持っています。会社が存在する場合、私はそれを追加せず、あなたの提案に応じてIDを関連付けるだけですが、IDが異なる新しい会社を作成します。 –