gpt4 book ai didi

entity-framework - 防止 EF 保存完整的对象图

转载 作者:行者123 更新时间:2023-12-05 07:40:11 25 4
gpt4 key购买 nike

我有一个模型如下

public class Lesson
{

public int Id { get; set; }
public Section Div { get; set; }

}

public class Section
{

public int Id { get; set; }

public string Name { get; set; }
}

我也有如下的数据库上下文

public class MyContext : DbContext
{

public MyContext() : base("DefaultConnection")
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}

public DbSet<Lesson> Lessons { get; set; }
public DbSet<Section> Sections { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}

}

然后我用下面的代码调用数据库

            using (MyContext c = new EFTest.MyContext())
{

Lesson d = new EFTest.Lesson();
Section ed = new EFTest.Section() { Name = "a" };
d.Div = ed;

c.Entry(d.Div).State = EntityState.Detached;

c.Lessons.Add(d);
c.SaveChanges();
}

我希望这段代码只保存 Lesson 对象,而不是保存 Lesson 和 Section 的完整图表,但实际情况是它保存了完整图表。我如何防止它这样做?

最佳答案

当您将实体添加到 DbSet 时,entityframework 将添加它的所有相关项。在将父实体添加到 DbSet 之后,您需要分离不想添加的实体。

using (MyContext c = new EFTest.MyContext())
{

Lesson d = new EFTest.Lesson();
Section ed = new EFTest.Section() { Name = "a" };
d.Div = ed;

c.Lessons.Add(d);

c.Entry(d.Div).State = EntityState.Detached;

c.SaveChanges();
}

如果你想添加与类(class)相关的部分,你需要使用相同的上下文,或者创建一个新的上下文并加载类(class)。

你可以使用这个代码

using (MyContext c = new EFTest.MyContext())
{

Lesson d = new EFTest.Lesson();
Section ed = new EFTest.Section() { Name = "a" };
d.Div = ed;

c.Lessons.Add(d);

c.Entry(d.Div).State = EntityState.Detached;

c.SaveChanges();

//you can use this code
ed.Lesson = d;
// or this code
d.Div = ed;

c.Sections.Add(ed);
c.SaveChanges();
}

关于entity-framework - 防止 EF 保存完整的对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46402160/

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