データベースに接続するためにエンティティフレームワークでコードを使用する2つのクラス(この例ではいずれにしても)があります。SQLクエリでEntity Frameworkを使用して外部キー接続を確立
私はこれらをコンテキストクラスで直接データベースに接続すると、外部キーの関係がうまく結びつき、顧客クラス内の連絡先のコレクションにアクセスできます。
class RemoteServerContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
public DbSet<Contact> Contacts { get; set; }
...
}
私の問題は、これらのデータベーステーブルがさまざまなシステムで使用されており、大量であることです。効率を上げるために、私はデフォルトの振る舞いを、テーブルに直接ではなく、ビュー(そしてストアドプロシージャも)を指すようにオーバーライドしました。
public IEnumerable<Customer> Customers()
{
return Database.SqlQuery<Customer>("SELECT * FROM vw_CustomerList");
}
public IEnumerable<Contact> Contacts()
{
return Database.SqlQuery<Contact>("SELECT * FROM vw_ContactsList");
}
それぞれのビューで、私は外来キーフィールドCustomerIdとContactIdが含まれていることを確認しました。
私はこれを行うと、クラスの結合が失われているように見えます。オブジェクトのいずれかにドリルすると、他のオブジェクトを指し示す必要があります。私は、外部キーフィールドが指し示すべきものを設定しようとしましたが、これはいずれも助けにならないようです。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Contact>().HasRequired(p => p.Customer)
.WithMany()
.HasForeignKey(k => k.CustomerId);
}
デフォルト動作をオーバーライドするときに接続を確立する方法はありますか?
こんにちは、それは素晴らしいです。ありがとうございました。私はトランザクションのものを無効にすることを望んでいます:既存のストアドプロシージャのセットを使用して作成、編集、削除してください。助けてくれてありがとう – GrahamJRoy
ストアドプロシージャの作成、編集、削除操作をオーバーライドする場合は、ストアドプロシージャのマッピングをサポートしていないため、最初にコードを使用することはできません。 EDMXを使用する必要があります。 –
あなたはちょうど私がこれまでにしたこと以上のものを数週間で大量の問題にぶつかり、私を救った。とてもありがたい。 EDMXに切り替える – GrahamJRoy