【发布时间】:2011-12-02 14:45:25
【问题描述】:
这个让我快疯了,尤其是因为我怀疑要么有一个简单的解决方案,要么我对 EF 的要求太高了......
情况是这样的:
我有一个用户控件 (ASCX),它基本上用作 EF 实体的编辑表单。当控件数据绑定时,我通过 ID 从数据库中提取对象并将其置于控件状态(通过覆盖 SaveControlState() 和 LoadControlState())。
然后用户以他们愉快的方式进行任何更改或不进行更改。该对象具有导航属性,因此当他们更改导航属性时,例如通过向对象上的位置集合添加位置,我正在更新处于控制状态的dataItem。
最后,在用户完成所有操作并单击保存按钮后,我尝试使用以下代码保存或创建记录:
protected void SaveButton_Click(object sender, EventArgs e)
{
DepartmentLookup dept = Master.DataContext
.Departments.Find(ResourceDepartment.SelectedValue.ToInt());
LocationLookup location = dataItem.Locations[ResourceLocation.SelectedIndex];
if (dataItem.OfficeLocation == null)
{
dataItem.OfficeLocation = new OfficeLocationLookup()
{
Location = location,
OfficeLocationName = location.LocationName
};
}
else if (!dataItem.OfficeLocation.Location.Equals(location))
{
dataItem.OfficeLocation.Location = location;
dataItem.OfficeLocation.OfficeLocationName = location.LocationName;
}
foreach (LocationLookup loc in dataItem.Locations)
{
if (loc.LocationTypeID == default(int))
{
LocationTypeLookup locType = Master.DataContext
.LocationTypes.SingleOrDefault(lt =>
lt.LocationType == loc.LocationType.LocationType);
if (locType != null)
loc.LocationType = locType;
}
else
{
LocationTypeLookup locType = Master.DataContext
.LocationTypes.Find(loc.LocationTypeID);
if (locType.LocationType != loc.LocationType.LocationType)
{
LocationTypeLookup newType = new LocationTypeLookup()
{
LocationType = loc.LocationType.LocationType
};
loc.LocationType = newType;
}
}
}
dataItem.PrimaryPhone = PrimaryPhone.Text;
dataItem.CellPhone = CellPhone.Text;
dataItem.Department = dept;
dataItem.EmailAddress = EmailAddress.Text;
dataItem.LastModifiedBy = HttpContext.Current.User.Identity.Name;
dataItem.LastModifiedDtm = DateTime.UtcNow;
if (dataItem.ResourceID == default(int))
Master.DataContext.Resources.Add(dataItem);
else
{
DbEntityEntry<Resource> entry = Master.DataContext.Entry<Resource>(dataItem);
if (entry != null && entry.State == EntityState.Detached)
{
Master.DataContext.Resources.Attach(dataItem);
// entry.State = EntityState.Modified;
}
}
Master.DataContext.SaveChanges();
}
我尝试了多种不同的方法来尝试将对象保存到数据库中,但都会导致各种错误。唯一没有抛出异常的方法是 SetValues 方法,它也没有保存任何导航属性,因此被证明没有任何价值。
任何帮助或建议都将在此不胜感激,因为我已经为这个问题绞尽脑汁好几天了。
提前致谢! J
【问题讨论】:
标签: c# asp.net entity-framework