是否可以为EntityFramework CodeFirst属性的getter / setter添加逻辑?
例如,我想做类似的事情:
public class Dog {
// This is a normal EF-backed property....
public virtual string Breed { get; set; }
// But we'd like a little logic applied to the Name!
public virtual string Name {
get {
string nameInDB = base.Name;
// where base.Name would be the same as the naked "get;" accessor
if (nameInDB == "Fido") {
return "Fido the Third"
} else {
return nameInDB;
}
}
set;
}
}
public class PetContext : DbContext {
public DbSet<Dog> Dogs;
}
返回之前可以稍微处理Dog.Name属性。
答案 0 :(得分:4)
您可以使用支持字段,而不是依赖于自动实现的属性。
private string _Name;
public string Name {
get {
if (_Name == "Fido") {
return "Fido the Third";
} else {
return _Name;
}
}
set {
_Name = value;
{
}
但是,通过控制setter中的值,我会采取相反的方式。对我而言,即使在调试方案中,这也为模型提供了更多的一致性。你需要考虑你的实际规格,看看哪种更适合你。例如:
private string _Name;
public string Name {
get {
return _Name;
}
set {
if (value == "Fido")
_Name = "Fido the Third";
_Name = value;
{
}