gpt4 book ai didi

c# - Entity Framework : Incorrect data while using Many-to-many relationship

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:29 25 4
gpt4 key购买 nike

我有以下使用 Entity Framework Code First 方法的 C# 代码。表是在数据库中创建的;但输入的数据不正确。

Person 1 is member of Club 1 and Club 3.

Person 2 is member of Club 2 and Club 3

That means Club 2 has only one member.

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

需要对 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; }




}
}

最佳答案

其实没有问题。由于 id 创建的顺序,我认为这是一个问题。我在 Entity Framework: Duplicate Records in Many-to-Many relationship 中发布了一些其他问题.

它使用

((IObjectContextAdapter)db).ObjectContext.Attach((IEntityWithKey)entity); 

关于c# - Entity Framework : Incorrect data while using Many-to-many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com