我一直在使用支持字段来更好地保护实体的某些属性的值,如https://learn.microsoft.com/en-us/ef/core/modeling/backing-field
中所述Microsoft 提供了以下示例,这就是我实现支持字段的方式:
public class Blog
{
private string _validatedUrl;
public int BlogId { get; set; }
[BackingField(nameof(_validatedUrl))]
public string Url
{
get { return _validatedUrl; }
}
}
摘自文章:
默认情况下,EF 将始终读取和写入支持字段
当我很高兴地使用这个约定时,我开始想知道:EF Core 如何访问私有支持字段?
它几乎肯定使用了反射。以下是其工作原理的示例:
var instance = Activator.CreateInstance(typeof(Blog));
var field = typeof(Blog).GetField(
"_validatedUrl",
BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(instance, "http://example.com/");
instance
对象的_validatedUrl
字段现在具有值"http://example.com/"
。