我有一个直截了当的场景
class Person
{
[Required]
public int Age {get;set;}
[Required]
public virtual Pet Pet {get;set;}
}
class Pet
{
...
}
Person
&都Pet
映射在上下文中。延迟加载已启用。如果我尝试更新此人的年龄,我会收到一个验证错误,说明Pet
是必需的。
var person = context.People.Find(id)
person.Age = 30;
context.SaveChanges(); //causes validation error.
我认为我不需要为上下文加载相关实体来生成正确的 sql 语句。我错过了什么,还是这不可能?
鉴于 EF 为此提供的有限选项的解决方案,我通过ActionFitler
public class DoNotValidateEntityFrameworkAttribute
: ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
actionContext
.ControllerContext
.Configuration
.DependencyResolver
.GetService<DbContext>()
.Configuration
.ValidateOnSaveEnabled = false;
base.OnActionExecuting(actionContext);
}
}
class MyController : ApiController
{
[DoNotValidateEntityFramework]
public void Put(int id, Model model)
{
...
}
}