2017-04-05 38 views
0

我有参考性的模型地图索引属性字段相同的表作为根类

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"); 
    } 
} 

映射到桌面的模型图:

AstronomycalBody Table

目前,编译器引发此例外...

enter image description here

回答

2

AstronomycalBody不是一个有效的EF实体模型类。

首先,EF核心does not support Complex/value types yet,所以Coord成员应扩大到位。

其次,EF不接口工作,所以在每个导航参考/集合元素的类型应该是实体

有了这样说,不知道你的IAstronomycalBody的样子,以及如何实现它(你可能需要明确执行某些成员),但实体类应该是这样的:

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; } 
} 

现在,由于按照惯例,它将生成显示的确切表格,只需删除OnModelCreating中显示的所有行,就完成了。

相关问题