以下のようなクラスをマップしようとしていますが、インターフェイスである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());
}
}
誰でも正しい方向に向けることができますか?私は助けてくれるドキュメンテーションで何も見たことがありませんか?あるいは、私は、ルールによって、これをまったくやってはいけないのですか?
ここでインターフェイスを使用する理由は、正確なタイプがわかっている場合ですか? 'Projects'プロパティを' List ' –
DavidG
に変更してください。正直なところ、@DavidGができるかどうかを知るだけです。私はまだこれに付随する文脈の残りの部分を構築しています、そして、私は正確なタイプがわからない場合に出くわすだろうと確信しています。 (私もそういう場合には道を見つけるだろうと確信しています) - 大きなものを見逃していたかどうか分かりませんでした。 – prestonsmith
それには非常に良い理由があります。あなたのビジネスロジックは、実際には正常かつ良いことでなければなりません。あなたがすでにそれを見つけてここでそれを忘れていない限り、答えを探していきます。) – Arwin