2016-08-22 6 views
1

以下のようなクラスをマップしようとしていますが、インターフェイスであるFacility.Projectsプロパティに関する例外が発生しています。明示的にEntity Framework 7のインターフェイスメンバーをマップします。

プロパティー.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()); 
    } 
} 

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

+0

ここでインターフェイスを使用する理由は、正確なタイプがわかっている場合ですか? 'Projects'プロパティを' List ' – DavidG

+0

に変更してください。正直なところ、@DavidGができるかどうかを知るだけです。私はまだこれに付随する文脈の残りの部分を構築しています、そして、私は正確なタイプがわからない場合に出くわすだろうと確信しています。 (私もそういう場合には道を見つけるだろうと確信しています) - 大きなものを見逃していたかどうか分かりませんでした。 – prestonsmith

+0

それには非常に良い理由があります。あなたのビジネスロジックは、実際には正常かつ良いことでなければなりません。あなたがすでにそれを見つけてここでそれを忘れていない限り、答えを探していきます。) – Arwin

答えて

1

1対多の関係を手動でマッピングするには(この例では、親に子を公開するだけです)、次のように設定することができます。

 modelBuilder.Entity<ProjectState>() 
      .HasMany(h => (ICollection<ProjectRoleState>)h.ProjectRoleStates) 
      .WithOne() 
      .HasForeignKey(p=>p.ProjectGuid); 
関連する問題