2017-04-05 13 views
0

私はこのテーブルの上にモデルをマップするために、この地図参照プロパティフィールド

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

のようなマッピングを使用したい

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

Iが基準プロパティを持つモデルがあります:現在、コンパイラはこれを投げている

AstronomycalBody Table

例外は...あなたのAstronomycalBody

enter image description here

答えて

2

は、有効な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のすべての行を削除するだけです。