【问题标题】:EF Core: Make reference object readonly but still includableEF Core:使引用对象只读但仍可包含
【发布时间】:2017-03-16 03:55:29
【问题描述】:

我有以下课程:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

我想将引用导航属性设为只读,以确保不能通过主体实体更改依赖实体。

我试过这样:

public Blog Blog { get; }

但是当它尝试执行Include 时出现以下错误: “无法绑定传递给 Include 运算符的表达式 '[post].Blog'。”

如何将参考导航属性设为只读但仍可包含?

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    如果模型类与 EF 上下文在同一个程序集和命名空间中,而其他用法不在,您可以尝试将 Blog 的设置器 internal 设置为允许 EF 设置它但阻止尝试别处。您可能还需要调整项目的 AssemblyInfo 文件,以使 EntityFramework DLL 和命名空间可以看到内部结构,因为实际执行设置的代码将在那里。

    请记住,虽然这会阻止其他编码人员将 Blog 设置为 Blog 类型的新实例,但现有实例仍然是可变的,因此编码人员/用户可以在不更改存储在Post。您可以通过类似于 Post 上的 Blog 属性将它们内部化来锁定 Blog 中的设置器,但是您开始打开一罐关于如何对博客进行有意更改的蠕虫;如果除了 DAL 之外所有博客始终是只读的,那么更改博客的唯一方法是在 DAL 中公开一个方法,该方法采用博客的一些可变变体(如 BlogDto),并将指定的参数复制到博客目的。如果这就是你想要的,那很好,但它可能不是,不管你是否知道。

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2018-02-28
      • 2021-07-12
      • 2021-07-26
      相关资源
      最近更新 更多