モデル内の他のテーブル/エンティティに対してかなり複雑なロジックを実行し、一連の列を公開する SQL Server ビューを作成しました。これらの列は 1 つを除いてすべて単純型 (bigints、nvarchars など) ですが、1 つがモデル内の複雑なエンティティです。
次のように、このビューにマップするエンティティを作成しました。
public class NetworkSuppliersByClient : Entity, IKeyed<long>
{
public long NetworkSuppliersByClientId { get; set; }
public long NetworkId { get; set; }
public String NetworkName { get; set; }
public long OwningClientId { get; set; }
public long ClientId { get; set; }
public virtual Supplier Supplier { get; set; }
public bool PublicEntry { get; set; }
public long GetKey ()
{
return NetworkSuppliersByClientId;
}
}
ご覧のとおり、サプライヤー エントリはモデル内の既存のエンティティにマップされ、それ自体が他の含まれるエンティティ (別名テーブル) との複合型です。
私が抱えている問題は、ビューから読み取ろうとすると、「エンティティ タイプ NetworkSuppliersByClient は、現在のコンテキストのモデルの一部ではありません。」というエラーが表示されることです。
ただし、コンテキストを使用してエンティティを DbSet として登録しようとすると、 「データベースに 'NetworkSuppliersByClients' という名前のオブジェクトが既に存在します。」というエラーが表示されます。これは、既存のビューと同じ名前のテーブルを作成しようとするためです。 .
たとえば、起動時に EF がテーブルを作成しようとするのを禁止する、またはビューから読み取るためのより良い方法はありますか?