实体框架 CTP4 代码优先:映射受保护的属性

Posted

技术标签:

【中文标题】实体框架 CTP4 代码优先:映射受保护的属性【英文标题】:Entity Framework CTP4 Code First: Mapping protected properties 【发布时间】:2010-08-26 17:45:38 【问题描述】:

我想在模型上使用延迟加载集合,但我希望通过单独的方法完成添加/删除功能。所以是这样的:

class Model

  protected virtual ICollection<Something> _somethings  get; set; 

  public IEnumerable<Something> Somethings 
   
    get  return _somethings;  
  

  public void AddSomething(Something thingToAdd)
  
    /*  logic */
    _somethings.Add(thingToAdd);
  

我不知道如何为此配置映射。我研究了使用配置类:EntityConfiguration。但是由于该属性受到保护,我无法弄清楚如何对其进行配置。有什么方法可以完成我在这里尝试做的事情吗?

【问题讨论】:

像存储库这样的东西会起作用吗? 我猜你和我有类似的问题:***.com/questions/3574333/… 【参考方案1】:

您可以使用只读静态表达式来访问这样的受保护属性

protected virtual ICollection<Something> _somesing  get; set; 
public static readonly Expression<Func<Model, ICollection<Something>>> Expression = p => p._something;

public IReadOnlyCollection<Something> Something

     return _sumething.AsReadOnly();

并在 DbContext 类的 OnModelCreating 方法中使用它来映射受保护的属性

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression);

【讨论】:

【参考方案2】:

我想如果您在 Model 类中声明配置类(继承 EntityConfiguration),它可以工作。这不是一个好的解决方案,因为通常不鼓励子类化,但这是我唯一能想到的。

【讨论】:

【参考方案3】:

我听说这只能使用 EDMX 文件方式来完成.. 不是代码优先。

【讨论】:

以上是关于实体框架 CTP4 代码优先:映射受保护的属性的主要内容,如果未能解决你的问题,请参考以下文章

我如何设计具有受保护/私有成员 DDD 样式的 EF5 代码优先实体

如何使用实体框架打开受密码保护的 SQL Server CE 数据库

实体框架 - 代码优先:使用相同类型的多个子/可选属性进行映射

实体框架代码优先和搜索标准

实体框架代码优先 - 为 SqlQuery 配置映射

实体框架 4.1 代码优先映射到将主键作为外键列的表