【发布时间】:2020-11-03 13:32:17
【问题描述】:
我使用以下版本的 EF Core:
Microsoft.EntityFrameworkCore.Sqlite 5.0.0-rc.2.20475.6
我有以下课程:
public class Garage
{
public int Id { get; set; }
public List<Car> Cars { get; set; } = new List<Car>();
}
public class Car
{
public int Id { get; set; }
}
public class Ferrari : Car
{
public Special Special { get; set; }
}
public class Special
{
public int Id { get; set; }
}
public class MyContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Filename=my.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Garage>().ToTable("Garage");
modelBuilder.Entity<Car>().ToTable("Car");
modelBuilder.Entity<Ferrari>().ToTable("Ferrari");
modelBuilder.Entity<Special>().ToTable("Special");
}
}
我有以下代码:
await using var context = new MyContext();
await context.Database.EnsureCreatedAsync();
var garage = new Garage();
context.Add(garage);
await context.SaveChangesAsync();
var ferrari = new Ferrari();
garage.Cars.Add(ferrari);
ferrari.Special = new Special();
Console.WriteLine($"Special reference is null: {(ferrari.Special == null ? "YES" : "NO")}");
await context.SaveChangesAsync();
Console.WriteLine($"Special reference is null: {(ferrari.Special == null ? "YES" : "NO")}");
对 Special 的引用被取消。输出如下:
Special is null: NO
Special is null: YES
你可以自己试试:https://github.com/dagid4/EfCoreBug
在数据库中一切正常。你知道如何解决这个问题吗?还是只是一个错误?
它可以与派生类相关。如果您将 Special property 从 Ferrari 移到 Car,它就可以工作。
【问题讨论】:
标签: c# entity-framework .net-core entity-framework-core