用例
- 围绕实体框架实施 DAL 以支持未来的 ORM 替换
- DAL 是为了部分暴露 EF 生成的类
- 与 Model-First 一起使用的实体框架(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) { ... }
}
要解决的问题
- 在使用“.edmx”文件的继承时,我希望相应的数据库表根据“UserProfile”生成,但是,派生类(UserProfile)的实体集名称设置为基类(UserInfo),省略了“确认令牌'。
是否可以通过将“UserProfile”用作数据库表而不是 UserInfo 的引用来定义@“.edmx”的继承?