【问题标题】:Detecting when POCO entities are being initialized in Entity Framework检测何时在实体框架中初始化 POCO 实体
【发布时间】:2015-02-21 22:51:59
【问题描述】:

假设我有一个带有这样属性的 POCO

public class Person
{
    private string _firstName;
    public string FirstName
    {
       get { return _firstName; }
       set
       {
           _firstName = value;
           // DO STUFF;
       }
    }
}

当对象被 EF 初始化时,我只希望设置 _firstName 而没有别的,只有在对象初始化之后,我才希望设置运行其余的 // DO STUFF;

【问题讨论】:

  • EF 真的不是为此而设计的。这不是不可能的,但它几乎总是比重组你的其他代码以避免需要这样做更多的工作。您能否解释一下您希望通过使FirstName 的行为因调用时间不同而有所不同?了解真正的问题可能会提供一种更简单的替代方法。
  • 我认为最好的选择是在你的数据库中创建一个与你的 POCO 类结构相同的视图,并且只返回 FirstName 列的值,而其他列则返回 null。从 VIEW 而不是原始表中读取。

标签: c# entity-framework entity-framework-6 poco


【解决方案1】:

你为什么不干脆

  1. 将属性设置器声明为protected;和
  2. 将您的// DO STUFF 行为公开为正确的方法SetFirstName(string firstName)

类似这样的:

public class Person
{
    public string FirstName { get; protected set; }

    public string SetFirstName(string value)
    {
       _firstName = value;
       // DO STUFF;
    }
}

更干净,根本不需要“破解” EF。

【讨论】:

  • 这不起作用,因为我的属性已绑定到 Windows 窗体控件,但可以创建一个不同的属性来绑定控件,然后获取/设置 EF 属性。跨度>
  • 好的,我明白你的意思了。我相信您的解决方法可能会奏效。但如果我是你,我会将绑定到表单控件的对象与 EF 实体分开,因为它们显然具有不同的职责(表示规则与 DB 持久性)。
猜你喜欢
  • 1970-01-01
  • 2011-08-21
  • 2012-02-08
  • 1970-01-01
  • 2023-03-18
  • 2012-03-22
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多