首页 > 解决方案 > EF Core vs EF6:通过添加导航属性保存

问题描述

我在 EF6 和 EF Core 之间遇到了一些不同的行为,我想知道我是否可以像在 EF6 中一样在 EF Core 中获得相同的行为,例如通过更改某些配置。

public partial class Parent
{
  public int Id { get; set; }
  public virtual ICollection<Child> Childs { get; set; }
}

public partial class Child
{
  public int Id { get; set; }
  public int ParentId { get; set; }
  public string SomeProperty { get; set; }
  public virtual Parent Parent { get; set; }
}

public class MyContext : DbContext
{
  public virtual DbSet<Parent> Parents { get; set; }
  public virtual DbSet<Child> Childs { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity<Child>()
    .HasOne(c => c.Parent)
    .WithMany(p => p.Childs)
    .HasForeignKey(c => c.ParentId);

  modelBuilder.Entity<Parent>()
    .HasMany(p => p.Childs)
    .WithOne(c => c.Parent);
}

以下代码使用 EF6 但不使用 EF Core 保存新子项

var db = new MyContext();
var parent = db.Parents.First();

var child = new Child
{
  SomeProperty = "foobar",
  Parent = parent
}
db.SaveChanges();

当然,在 EF Core 中也可以添加以下内容。

db.Childs.Add(child);

编辑:ObjectContext已使用 EDMX 生成的 EF6 模型和类。

标签: c#entity-framework-6ef-core-2.1

解决方案


推荐阅读