使用事例
- Entity Framework に DAL を実装して、将来の ORM の置き換えを可能にする
- DAL は、EF によって生成されたクラスを部分的に公開することです。
- Model-First で使用する Entity-Framework (DB はまだ存在しません)
分析
- EF で生成されたクラスの部分的な公開を有効にするには、EF ナビゲーション プロパティがコンテキスト外に公開されないようにする必要があります。また、セキュリティ上の理由から、値のサブセットを直接公開しないでください。
- そのための最適な解決策は、 ~local~ プロパティが基本クラスで実装され、ナビゲーション プロパティが派生クラスに追加される継承を使用することでした。このようにして、DAL は基本クラスのみを公開し、コンテキストから外れるのをエレガントに回避できます。ナビゲーション プロップの露出。
例
class UserInfo
{
public int UserId { get; set; }
public string DisplayName { get; set; }
public DateTime CreationTime { get; set; }
public DateTime LastModified { get; set; }
}
class UserProfile : public UserInfo
{
// I don't want this to be directly exposed out of the DAL
public string ConfirmationToken { get; set; }
// Navigation property
public virtual ICollection<UserVariant> Variants { get; set; }
}
class DAL
{
// Returned value include no navigation properties
public UserInfo GetUser(int UserId) { ... }
}
解決すべき問題
- Inheritance @ '.edmx' ファイルを使用している間、対応する DB テーブルが 'UserProfile' に従って結果になると予想されますが、派生クラス ( UserProfile ) のエンティティ セット名は基本クラス ( UserInfo ) に設定され、'確認トークン」。
UserInfo ではなく DB テーブルの参照として「UserProfile」が使用されるように、「.edmx」で継承を定義することは可能ですか?