Sqlite 将引用属性字段映射到与根类相同的表

Sqlite 将引用属性字段映射到与根类相同的表,sqlite,mapping,code-first,entity-framework-core,Sqlite,Mapping,Code First,Entity Framework Core,我有参考属性的模型 internal class AstronomycalBody : IAstronomycalBody { public long Id { get; set; } public string Name { get; set; } public Coord Coord { get; set; } public long Mass { get; set; } public double Speed { get; set; }

我有参考属性的模型

internal class AstronomycalBody : IAstronomycalBody
{
    public long Id { get; set; }

    public string Name { get; set; }

    public Coord Coord { get; set; }

    public long Mass { get; set; }

    public double Speed { get; set; }

    public IAstronomycalBody CentralObject { get; set; }
}

public class Coord
{
    public long X { get; set; }

    public long Y { get; set; }

    public long Z { get; set; }
}
我想像这样使用映射

internal class AstronomycalBodyContext : DbContext
{
    public DbSet<AstronomycalBody> AstronomycalBody { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite(DbSettings.ConnectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.X).ForSqliteHasColumnName("CoordX");
        modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.Y).ForSqliteHasColumnName("CoordY");
        modelBuilder.Entity<AstronomycalBody>().Property(p => p.Coord.Z).ForSqliteHasColumnName("CoordZ");
        modelBuilder.Entity<AstronomycalBody>().Property(p => p.CentralObject.Id).ForSqliteHasColumnName("CentralObjectId");
    }
}
内部类AstronomycalBodyContext:DbContext
{
公共数据库集

当前,编译器正在引发此异常


您的
天体物理学
不是有效的EF实体模型类

首先是EF核心,因此应该适当扩展
Coord
成员

其次,EF不与接口一起工作,因此每个导航引用/集合元素类型都应该是实体类

话虽如此,但不确定您的
iastronomicalbody
看起来如何以及如何实现它(您可能需要显式实现某些成员),但实体类应该是这样的:

internal class AstronomycalBody //: IAstronomycalBody
{
    public long Id { get; set; }
    public string Name { get; set; }
    //public Coord Coord { get; set; }
    public long CoordX { get; set; }
    public long CoordY { get; set; }
    public long CoordZ { get; set; }
    public long Mass { get; set; }
    public double Speed { get; set; }
    public AstronomycalBody CentralObject { get; set; }
}

现在,由于按照惯例,它将生成所示的精确表格,只需删除模型创建中的所有显示行即可。

您的
AstronomycalBody
不是有效的EF实体模型类

首先是EF核心,因此应该适当扩展
Coord
成员

其次,EF不与接口一起工作,因此每个导航引用/集合元素类型都应该是实体类

话虽如此,但不确定您的
iastronomicalbody
看起来如何以及如何实现它(您可能需要显式实现某些成员),但实体类应该是这样的:

internal class AstronomycalBody //: IAstronomycalBody
{
    public long Id { get; set; }
    public string Name { get; set; }
    //public Coord Coord { get; set; }
    public long CoordX { get; set; }
    public long CoordY { get; set; }
    public long CoordZ { get; set; }
    public long Mass { get; set; }
    public double Speed { get; set; }
    public AstronomycalBody CentralObject { get; set; }
}
现在,由于按照惯例,它将生成所示的精确表格,只需删除ModelCreating上的
中显示的所有行即可