我有带参考属性的模型
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");
}
}
在此表上映射模型:
目前,编译器正在抛出此异常......
答案 0 :(得分:2)
您的Coord
不是有效的EF实体模型类。
首先,EF Core does not support Complex/value types yet,因此IAstronomycalBody
成员应该扩展到位。
其次,EF不能与 interfaces 一起使用,因此每个导航参考/集合元素类型都应该是实体 class 。
话虽如此,不确定你的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
现在,按照惯例,它会生成所显示的确切表格,只需删除def get_lines(path):
for line in csv.reader(open(path), delimiter=";"):
if line:
yield line
else:
break
f = [i for i in get_lines("blah.csv")]
print f
中显示的所有行,即可完成。