Entity framework ef6保存时仅设置导航属性的外键属性
保存具有用作外键的导航属性的实体时:Entity framework ef6保存时仅设置导航属性的外键属性,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,保存具有用作外键的导航属性的实体时: this.HasRequired<Role>(c => c.Role).WithMany().Map(c => c.MapKey("role_id")); 这就是为什么我得到“dbentityvalidationexception”异常并出现错误的原因。“字段是必需的” 有可能用某种方法解决这个问题吗? 或者我必须从DB中获取该导航属性的完整实体,设置我保存的实体的导航属性,然后保存我的初始实体(它现在可以工作,但看起来不是一个好的
this.HasRequired<Role>(c => c.Role).WithMany().Map(c => c.MapKey("role_id"));
这就是为什么我得到“dbentityvalidationexception”异常并出现错误的原因。“字段是必需的”
有可能用某种方法解决这个问题吗?
或者我必须从DB中获取该导航属性的完整实体,设置我保存的实体的导航属性,然后保存我的初始实体(它现在可以工作,但看起来不是一个好的解决方案)
提前谢谢
这是我处理模型的MS MVC操作:
[HttpPost]
public async Task<ActionResult> AddAsync(Staff staff)
{
await staffService.InsertAsync(staff);
return RedirectToAction("Index");
}
我或多或少找到了解决那个问题的好办法。 我已将只有外键属性的所有导航属性设置为 EntityState.Unchanged 现在我有了这个只保存特定实体(人员)的方法 这用于保存完整图形(在基本泛型类中): 使用“EntityState.Unchanged”(我将以最简单的方式显示)可以在角色仅填充外键属性(角色具有RoleName必需属性)时保存人员
如果有人有更合适的解决方案,我很乐意知道,谢谢。我或多或少找到了解决这个问题的好办法。 我已将只有外键属性的所有导航属性设置为 EntityState.Unchanged 现在我有了这个只保存特定实体(人员)的方法 这用于保存完整图形(在基本泛型类中): 使用“EntityState.Unchanged”(我将以最简单的方式显示)可以在角色仅填充外键属性(角色具有RoleName必需属性)时保存人员
如果有人有更合适的解决方案,我很乐意知道,谢谢。您可以在设置属性的地方共享代码吗?您可以在设置属性的地方共享代码吗?
[HttpPost]
public async Task<ActionResult> AddAsync(Staff staff)
{
await staffService.InsertAsync(staff);
return RedirectToAction("Index");
}
<dt>
@Html.Label("Role")
</dt>
<dd>
@Html.DropDownListFor(_=>_.Role.Id, new SelectList(ViewBag.Roles, "Id", "RoleName"), "- Please select a Role -")
</dd>
public class Staff
{
public Staff()
{
Name = new Name();
}
public int Id { get; set; }
public Name Name { get; set; }
...
public virtual Role Role { get; set; }
...
}
public virtual Staff InsertStaff(Staff entity)
{
context.Entry(entity.Role).State = EntityState.Unchanged;
context.Entry(entity.Maneger).State = EntityState.Unchanged;
SetStaffNavigationPropertiesUnchanged(entity);
return dbSet.Add(entity);
}
public virtual TEntity InsertGraph(TEntity entity)
{
return dbSet.Add(entity);
}
using (ClinchContext context = new ClinchContext())
{
var role = new Role { Id = 1 };
Staff staff = context.Staffs.Add(new Staff
{
Name = new Name { Firstname = "FN", Surname = "S", Patronymic = "P" },
Email = "E",
Login = "L",
IsDeleted = false,
Role = role,
Maneger = null//nullable for now
});
context.Entry(staff.Role).State = EntityState.Unchanged;
context.SaveChanges();
}