まず、少しコンテキスト
Paradoxデータベースを使用するデスクトップアプリケーションが1つあり、SQLServerを使用して現在のデスクトップアプリを置き換える新しいASP.NETアプリケーションを開発しています。
移行はフェーズで行われます。Webアプリの最初のバージョンは、SQLServerとParadoxを同時に使用します。レガシーエンティティのデータはParadoxから取得され、新しいエンティティのデータはSQLServerから取得されます。そのため、アプリのデスクトップバージョンとWebバージョンは同じように使用できます。
第2フェーズでは、ParadoxからのすべてのデータがSQLServerにインポートされます。古いデスクトップアプリ(およびParadox db)は使用されなくなります。
さて、技術的な質問
2つのエンティティを持つ単純なモデルを想像してみてください。
public class Customer
{
public Int32 ID { get; set; }
public String Name { get; set; }
virtual public IList<User> MyUsers { get; set; }
}
public class User
{
public Int32 ID { get; set; }
public String Name { get; set; }
virtual public Customer MyCustomer { get; set; }
}
public class SqlServerContext : DbContext
{
public SqlServerContext()
{
base.Configuration.ValidateOnSaveEnabled = false;
base.Configuration.LazyLoadingEnabled = true;
base.Configuration.ProxyCreationEnabled = true;
base.Configuration.AutoDetectChangesEnabled = true;
}
public DbSet<User> Users { get; set; }
public DbSet<Customer> Customers { get; set; }
}
両方のエンティティにSQLServerのみを使用すると、すべてが正常に機能します。しかし、今度はParadoxから顧客データを取得し、SQLServerからユーザーデータを取得したいと思います。
次に、Paradoxプロバイダーを使用して、基盤となるOleDbConnectionを使用して、顧客用のリポジトリを作成します。もちろん、UserにはCustomerプロパティがあるため、EntityFrameworkはSQLServerにCustomersテーブルを作成します。
次に、ユーザーと顧客の間のデータベース関係(FK)を削除しました。これで、顧客が異なるデータベースにある場合でも、顧客に関連するユーザーを挿入できるようになりました。
問題は次のとおりです。dbからユーザーを取得しようとすると[例:context.Users.Find(id)]ユーザーのIDと名前を読み取ることはできますが、user.Customerはnullです。このデータはSQLServerのUsersテーブルにあるため、 user.Customer.IDプロパティを介して顧客IDを取得することを期待していました。
私は正しい道を進んでいますか?もしそうなら、EFはどのようにしてユーザーの顧客IDをもたらすことができますか?
そうでない場合、このシナリオの良いアプローチは何でしょうか?モデル内の外部キープロパティを公開したくない(つまり、Userエンティティにint CustomerIdプロパティを含めたくない)。
前もって感謝します!