EF edmx继承

时间:2013-04-15 11:40:36

标签: c# entity-framework entity-framework-5

用例

  1. 围绕实体框架实施DAL以启用未来的ORM替换
  2. DAL将部分公开EF生成的类
  3. 要与Model-First一起使用的实体框架(DB尚不存在)
  4. 分析

    • 要启用EF生成类的部分曝光,必须确保不会将EF导航道具暴露在上下文之外。此外,由于安全原因,不应直接公开值的子集。
    • 为此,最佳解决方案是使用继承,其中~local~属性在Base类中实现,Navigation属性被添加到派生类,这样,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) { ... }
    }
    

    要解决的问题

    • 使用继承@“.edmx”文件时,我希望相应的DB表按照'UserProfile'结果,但是,派生类(UserProfile)的实体集名称设置为基类(UserInfo)省略'confirmationToken'。

    是否可以定义'.edmx'的继承,以便'UserProfile'将用作数据库表的参考而不是UserInfo?

1 个答案:

答案 0 :(得分:0)

解决方案是将'Model-First'转换为'Code-First'并让DB Model类继承自暴露所选方法的接口(非导航属性),然后DAL将暴露此接口,从而避免上下文导航attr访问。

不幸的是,我没有找到针对上述问题的Model-First解决方案,而且必须采用Code-First。