1

使用代码优先的 EntityFramework 时,我需要在其他属性之前设置一个属性 - 当它从数据库创建对象时,如何指定它调用属性集的顺序?

例如

public class Person
{
    public string Name { get; set; }
    public string Something 
    { 
        get { return something; } 
        set
        {
             something = value + " for " + Name;
        }
    }

    private string something;
}

在上面的代码中,我需要在设置 Something 属性时已经设置 Name 属性。

这不是实际的例子——我知道还有其他方法可以从字面上实现这一点,但我不是在追求这些,只是我如何告诉 EF 在某事之前设置名称。

4

1 回答 1

0

我正在尝试了解您的问题的背景。我将做出以下假设:

  1. 传递给 setter 的值不是另一个计算属性
  2. 传递给 setter 的值旨在存储在数据库中
  3. 如果名称已更新,您是否希望更新某些内容以反映新名称?

我认为您在这里的错误是尝试将派生部分添加到您要存储的值中。在另一个属性中或在 get 上计算漂亮的名称:

UPDATE有一个示例覆盖了Something 属性上的get,但由于我认为这是不好的做法,所以将其删除。

public class Person
{
public string Name { get; set; }

public string Something { get; set; }

public string getFancySomething { 
    { return Something + " for " + Name; } 
}
}

最后 - (在这里我可以使用一些帮助,因为我没有遇到需要做这样的事情的情况)我的猜测是你不需要以Something你尝试的方式存储部分计算的属性,但如果您确实需要,我认为其他详细信息可能会帮助某人为您提供更好的答案。

更新 2 如我的评论中所述 - 不确定这是否可行,感觉非常错误,但您可以尝试以下操作:

modelBuilder.Entity<Person>().Ignore(x => x.Something);

然后在二传手:

public class Person
{
public string Name { 
   get { return Name; }
   set { 
       Name = value;

       Something = lookup();
    }
}
}

同样,这将取决于您的需要,并且不会满足传递此值的任何需要,而且我不确定这是一个好主意。

于 2013-01-17T23:18:42.360 回答