2

Entity Framework Code Firstアプローチを使用する次の C# コードがあります。テーブルはデータベースに作成されます。しかし、入力されたデータが正しくありません。

Person 1 は、Club 1 と Club 3 のメンバーです。

Person 2 は Club 2 と Club 3 のメンバーです

つまり、クラブ 2 のメンバーは 1 人だけです。

しかし、次のクエリを使用すると、データベースに到達したデータが正しくないことがわかります。

C# コードを正しくするには、どのような変更を行う必要がありますか?

ここに画像の説明を入力

    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; }
    

    
    
}
}
4

1 に答える 1

0

実は問題ありませんでした。ID作成の順番の関係で問題だと思いました。Entity Frameworkに投稿した他の問題がいくつかあります:多対多の関係でレコードが重複しています。

それは使用しています

((IObjectContextAdapter)db).ObjectContext.Attach((IEntityWithKey)entity); 
于 2012-07-26T05:39:47.990 に答える