2

EF 4.3コードの最初のアプローチを使用して多対多の関係を作成する場合、接続テーブルにデータを保存できません。また、オブジェクトをIcollectionに保存してこのテーブルを埋める方法の例もありません...これが私の例です:

モデル

public class Hospital
{
    //PK
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string County { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public Guid User_Id { get; set; }

    //FK
    public virtual ICollection<Operator> Operators { get; set; }

}

public class Operator
{
    //PK
    [Key]
    public int Id { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public string Email { get; set; }

    //FK
    public virtual ICollection<Hospital> Hospitals { get; set; }
}

public class Project: DbContext
{
    public DbSet<Hospital> Hospitals { get; set; }
    public DbSet<Operator> Operators { get; set; }
}

コントローラ

public void AddOperater()
{

    Hospital h = new Hospital();
    h = db.Hospitals.Single(a=>a.Id ==1);

    var o = new Operator();
    o.FirstName = "John";
    o.LastName = "Doe";
    o.Dob = new DateTime(1988,2,12);
    o.Email = "johndoe@gmail.com";
    o.Hospitals.Add(h);

    db.SaveChanges();
 }

このアプローチでo.Hospitals.Add(h);は、病院のインスタンスがデータでいっぱいになっている場合でも、ここでエラーが発生し続けます。dbo.Operatorsリレーションシップ テーブルとテーブルの両方にデータを保存するにはどうすればよいdbo.OperatorHospitalですか?

4

1 に答える 1

3

o.Hospitals.Add(h) は、リストが null リストであるため失敗します。null リストに対して Add() を呼び出すことはできません。通常、ほとんどの人は、エンティティのコンストラクターでリストをインスタンス化することでこれを回避します...そのように...現在の行はCSharpの問題により爆発しています。

public class Hospital
{
    //PK
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string County { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public Guid User_Id { get; set; }

     //FK
    public virtual ICollection<Operator> Operators { get; set; }

    public Hospital()
    {
         Operators = new List<Operator>();
    }

}


public class Operator
{
   //PK
   [Key]
   public int Id { get; set; }

   public string FirstName { get; set; }
   public string LastName { get; set; }
   public DateTime Dob { get; set; }
   public string Email { get; set; }

   //FK
   public virtual ICollection<Hospital> Hospitals { get; set; }

   public Operator()
   {
       Hospitals = new List<Hospital>();
   }

}

于 2012-05-15T19:10:57.220 に答える