2012-07-25 38 views
2

我有以下使用实体框架的C#代码代码优先方法。这些表格是在数据库中创建的;但输入的数据不正确。实体框架:使用多对多关系时数据不正确

人1俱乐部1的构件和俱乐部3.

人2是俱乐部2的部件和俱乐部3

这意味着俱乐部2仅具有一个成员。

但是使用下面的查询可以看出数据库中的数据是不正确的。

需要在C#代码中进行哪些更改才能使其正确?

enter image description here

static void Main(string[] args) 
    { 

     Database.SetInitializer<NerdDinners>(new MyInitializer()); 
     string connectionstring = "Data Source=.;Initial Catalog=NerdDinners;Integrated Security=True;Connect Timeout=30"; 

     using (var db = new NerdDinners(connectionstring)) 
     { 

      Club club1 = new Club(); 
      Club club2 = new Club(); 
      Club club3 = new Club(); 

      Person p1 = new Person(); 
      Person p2 = new Person(); 


      List<Club> clubsForPerson1 = new List<Club>(); 
      clubsForPerson1.Add(club1); 
      clubsForPerson1.Add(club3); 

      List<Club> clubsForPerson2 = new List<Club>(); 
      clubsForPerson2.Add(club2); 
      clubsForPerson2.Add(club3); 

      List<Person> personInClub1 = new List<Person>(); 
      personInClub1.Add(p1); 

      List<Person> personInClub2 = new List<Person>(); 
      personInClub2.Add(p2); 

      List<Person> personInClub3 = new List<Person>(); 
      personInClub3.Add(p1); 
      personInClub3.Add(p2); 


      club1.Members=personInClub1; 
      club2.Members=personInClub2; 
      club3.Members=personInClub3; 


      p1.Clubs = clubsForPerson1; 
      p2.Clubs = clubsForPerson2; 


      db.Clubs.Add(club1); 
      db.Clubs.Add(club2); 
      db.Clubs.Add(club3); 

      db.Persons.Add(p1); 
      db.Persons.Add(p2); 


      int recordsAffected = db.SaveChanges(); 


     } 

    } 

namespace LijosEF 
{ 

public class Person 
{ 
    public int PersonId { get; set; } 
    public virtual ICollection<Club> Clubs { get; set; } 
} 

public class Club 
{ 
    public int ClubId { get; set; } 
    public virtual ICollection<Person> Members { get; set; } 
} 


public abstract class PaymentComponent 
{ 

    public int PaymentComponentID { get; set; } 
    public int MyValue { get; set; } 
    public abstract int GetEffectiveValue(); 
} 

public partial class GiftCouponPayment : PaymentComponent 
{ 

    public override int GetEffectiveValue() 
    { 
     if (MyValue < 2000) 
     { 
      return 0; 
     } 
     return MyValue; 
    } 

} 

public partial class ClubCardPayment : PaymentComponent 
{ 
    public override int GetEffectiveValue() 
    { 
     return MyValue; 
    } 
} 

public partial class Payment 
{ 
    public int PaymentID { get; set; } 
    public List<PaymentComponent> PaymentComponents { get; set; } 
    public DateTime PayedTime { get; set; } 

} 


public class MyInitializer : CreateDatabaseIfNotExists<NerdDinners> 
{ 
    //Only one identity column can be created per table. 
    protected override void Seed(NerdDinners context) 
    { 


    } 
} 



//System.Data.Entity.DbContext is from EntityFramework.dll 
public class NerdDinners : System.Data.Entity.DbContext 
{ 

    public NerdDinners(string connString): base(connString) 
    { 

    } 

    protected override void OnModelCreating(DbModelBuilder modelbuilder) 
    { 
     //Fluent API - Plural Removal 
     modelbuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 

    public DbSet<Person> Persons { get; set; } 
    public DbSet<Club> Clubs { get; set; } 




} 
} 
+2

你肯定club2具有ID = 2?你的代码在哪里? – 2012-07-25 06:29:59

+0

@AmiramKorach我没有明确地在代码中设置它。 – Lijo 2012-07-25 06:31:08

+2

所以也许club3.id = 2? – 2012-07-25 06:31:35

回答