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上的中显示的所有行即可