Entity Framework 7で明示的にインターフェイスメンバーをマップする

c# entity-framework entity-framework-core

質問

私は以下のようなクラスをマップしようとしていますが、InterfaceであるFacility.Projectsプロパティに関する例外が発生しています。

プロパティー.ProjectsはインターフェースタイプIProjectです。ナビゲーションプロパティの場合は、マッピングされたエンティティタイプにキャストしてこのプロパティの関係を手動で設定します。そうでない場合は、モデルからプロパティを無視します。

public class Facility : BaseData
{
    [ForeignKey("ClientId")]
    public Client Owner { get; set; }

    public List<IProject> Projects { get; protected set; }

    public Facility()
    {
        Initialize();
    }

    private void Initialize()
    {
        Projects = new List<IProject>();
    }
}

私は、 FacilityがマップされているDbContextクラスのOnModelCreatingメソッドを介して他のプロパティをマップしましたが、実際に間違っているHasColumnType以外をキャストする正しい場所のようなものは見ていません。

public class FacilityRepository : BaseRepository<Facility>, IFacilityRepository
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder
            .Entity<Client>()
            .Property(f => f.Id)
            .ForSqliteHasColumnName("ClientId");

        modelBuilder
            .Entity<Project>()
            .Property(x => x.Id)
            .ForSqliteHasColumnName("ProjectId");


        // area where I've tried and failed to find a good spot to do some manual casting
        modelBuilder
            .Entity<Facility>()
            .Property(f => f.Projects)
            .HasColumnType<Project>(new PropertyBuilder());
    }
}

誰かが私を正しい方向に向けることができますか?私は助けてくれるドキュメンテーションで何も見たことがありませんか?あるいは、私は、ルールによって、これをまったくやってはいけないのですか?

受け入れられた回答

1対多の関係を手動でマッピングするには(この例では、親に子を公開するだけで、逆はしません)、次のように設定することができます。キャストは次のように簡単になります。

        modelBuilder.Entity<ProjectState>()
            .HasMany(h => (ICollection<ProjectRoleState>)h.ProjectRoleStates)
            .WithOne()
            .HasForeignKey(p=>p.ProjectGuid);


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ