C#Entity Framework,使用多对多连接向数据库添加数据

问题描述 投票:0回答:1

我对编程很新,对数据库也很陌生。我已经使用CodeFirst方法来创建本地数据库。 Database model

Work类的代码是:

public class Work
    {
        public int WorkId{ get; set; }
        public string Name { get; set; }
        public DateTime Start { get; set; }
        public DateTime End { get; set; }
        public string Position { get; set; }
        public int SalaryMinimum { get; set; }
        public int SalaryMaximum { get; set; }
        public string Education { get; set; }
        public int ClientID { get; set; }
        public virtual List<WorkCondition> WorkCondition { get; set; }
    }

WorkCondition类的代码是:

 public class WorkCondition
    {
        public int WorkConditionId { get; set; }
        public string Name { get; set; }
        public string Description{ get; set; }
        public virtual List<Work> Work { get; set; }
    }

DbContext代码,它实现了多对多关系:

 public class CrmDbContext : DbContext
    {
        public CrmDbContext() : base("name=CrmSQL") { }
        public DbSet<Client> Client { get; set; }
        public DbSet<Work> Work { get; set; }
        public DbSet<WorkCondition> WorkCondition {get; set;}
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Work>()
                        .HasMany<WorkCondition>(wc => wc.WorkCondition)
                        .WithMany(w => w.Work)
                        .Map(wwc =>
                        {
                            wwc.MapLeftKey("WorkId");
                            wwc.MapRightKey("WorkConditionId");
                            wwc.ToTable("WorkWorkCondition");
                        });

        }
    }

在“enable-migartion”之后,“add-migration Initial”和“update-database”EF制作了一个管理多对多关系的表WorkWorkCondition,有两列:WorkConditionId和WorkId。

到目前为止,我添加新工作的代码如下所示:

using (var db = new CrmDbContext())
{
    var work1 = new Work
    {
        Name = "Tech Play add 2",
        Start = DateTime.Now,
        End = DateTime.Now,
        SalaryMinimum = 2000,
        SalaryMaximum = 3000,
        WorkCondition = new List<WorkCondition>(),
        ClientID = 2
    };
    //WorkConditionId = 1 and WorkConditionId = 3 have to be associated with 
    //this new work 
    db.Work.Add(work1);
    db.SaveChanges();
}

所以,我的问题是我无法理解如何插入数据,以便EF自动填充WorkWorkCondition表。在我的情况下,我想添加具有多个WorkConditions的新工作。 WorkConditions填充了3行,我想通过WorkConditionId引用它们。

c# entity-framework many-to-many
1个回答
0
投票

结束这段代码,绝对不是最漂亮的代码,但它对我有用。

using (var db = new CrmDbContext())
{
    List<WorkCondition> wc2 = new List<WorkCondition>();
    wc2.Add(db.WorkCondition.Where(wcid => wcid.WorkConditionId == 3).SingleOrDefault());
    wc2.Add(db.WorkCondition.Where(wcid => wcid.WorkConditionId == 1).SingleOrDefault());

    var work1 = new Work
    {
        Name = "Tech Play add 2",
        Start = DateTime.Now,
        End = DateTime.Now,
        SalaryMinimum = 2000,
        SalaryMaximum = 3000,
        WorkCondition = wc2
    };
    db.Work.Add(work1);
    db.SaveChanges();
}
© www.soinside.com 2019 - 2024. All rights reserved.