我有一个 EF6 数据上下文,我使用以下方法手动绑定到表单。
private void GetJob(int i)
{
var context = new APIntegrationEntities();
var jb = context.Jobs.Find(i);
//tJobName.AppendText(jb.JobName.ToString());
tId.Text = jb.Id.ToString();
tJobName.Text = jb.JobName;
tSourceQuery.Text = jb.SourceQuery;
tAPI.Text = jb.API;
tConnectionString.Text = jb.ConnectionString;
tSheetName.Text = jb.SheetName;
tVersion.Text = jb.VersionName;
}
我正在尝试更新以下内容:
private void bSave_Click(object sender, RoutedEventArgs e)
{
var context = new APIntegrationEntities();
var jb = context.Jobs.Find(Int32.Parse(tId.Text));
jb.JobName = tJobName.Text;
jb.SheetName = tSheetName.Text;
jb.SourceQuery = tSourceQuery.Text;
jb.ConnectionString = tConnectionString.Text;
jb.VersionName = tVersion.Text;
jb.Id = Int32.Parse(tId.Text);
jb.API = null;
context.SaveChanges();
}
但我得到一个例外:
System.Data.Entity.Validation.DbEntityValidationException is unhandle HResult=-2146232032 消息=一个或多个实体的验证失败。有关更多详细信息,请参阅"实体验证错误"属性。 源=实体框架
我是否正确使用了 EF? 是否有更好的方法将上下文绑定到表单并处理更新?
您在技术上正确地使用了 EF,但从设计的角度来看不是很好。
您得到的异常意味着您正在尝试从数据库的角度来看在作业实体中传递一些非法的数据(例如,不适合datetime
数据库类型的DateTime
、非空列中的 null、长度超过 maxlength 的字符串等)。
因此,您需要查看异常详细信息,并找出导致问题的特定属性,并更正您在其中传递的数据。