我有一个直截了当的场景
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)
{
...
}
}
答案 0 :(得分:0)
一种选择是改用:
class Person
{
[Required]
public int Age {get;set;}
[Required]
public int PetId { get; set; }
public virtual Pet Pet {get;set;}
}
这将只需要FK而不是实体。其他选项是关闭验证,因为它不支持不完整的对象图:
context.Configuration.ValidateOnSaveEnabled = false;