LINQ:SubmitChanges和Refresh后没有得到更新
问题描述:
我发现了一些奇怪的东西。比方说,我有一个汽车模型和公司模型。LINQ:SubmitChanges和Refresh后没有得到更新
所以我的汽车模型有一个公司Id行。
比方说,我改变的一个汽车CompanyId然后我的SubmitChanges对的DataContext。
这里是我的问题: 我的汽车的CompanyId模型得到更新。但Car.Company关系没有。
所以如果我改变Car.CompanyId从1到2。然后我输出Car.Company.CompanyId,它会显示1而不是2。
所以我的问题是:有没有办法更新DataContext中的所有东西?
我目前使用:
public void RefreshCollection()
{
// On rafraichit les données à partir de la DB.
dataContext.Refresh(RefreshMode.KeepChanges);
// On va chercher les données complête de la table.
purchaseOrders = from po in dataContext.PurchaseOrders
orderby po.PurchaseOrderId ascending
select po;
}
更新我的收藏。
和:
private void sauvegarderToolStripMenuItem_Click(object sender, EventArgs e)
{
purchaseOrder.OrderDate = orderDate.Value;
purchaseOrder.RequiredDate = requiredDate.Value;
purchaseOrder.ShipTo = shipTo.Text;
purchaseOrder.State = helper.ConvertComboBoxIndexToStateIndex(
stateKey.SelectedIndex);
// On cast un autre type pour le forcer à être un ComboBoxItem
var supplierItem = (ComboBoxItem)supplierId.SelectedItem;
purchaseOrder.SupplierId = supplierItem.Id;
dataContext.SubmitChanges();
}
提交我的变化。
答
我觉得你行
purchaseOrder.SupplierId = supplierItem.Id;
应该读起来更像
purchaseOrder.Supplier = supplierItem;
只是猜测性质。
您还可能要调用SaveChanges()
答
之后调用dataContext.Refresh()在purchaseOrder的只是改变了ID是不够的,还改变相关公司对象。您需要加载您想要的公司对象并将其分配给Car.Company。这也将更新Car.CompanyID属性。
喜欢的东西:
var car = context.Cars.First(); // pick your car
var newCompany = context.Companies.First(); // pick your company
car.Company = newCompany;
context.SubmitChanges();
答
不知道这是否是一种可行的选择,但你总是有考虑您的查询,包括您需要的相关实体的选项,并附加它,像这样:
purchaseOrders = from po in dataContext.PurchaseOrders.Include("Company")
orderby po.PurchaseOrderId ascending
select po;
dataContext.Attach(purchaseOrders);
答
尝试在每个操作上打开一个单独的DataContext。理想情况下,任何更新操作都应以SubmitChanges结束并关闭DataContext。 DataContext是一个轻量级对象,在这种情况下不应该增加很多开销。例如:
public void RefreshCollection()
{
using (var dataContext = CreateDataContext())
{
// On va chercher les données complête de la table.
purchaseOrders = from po in dataContext.PurchaseOrders
orderby po.PurchaseOrderId ascending
select po;
}
}
private void sauvegarderToolStripMenuItem_Click(object sender, EventArgs e)
{
using (var dataContext = CreateDataContext())
{
purchaseOrder.OrderDate = orderDate.Value;
purchaseOrder.RequiredDate = requiredDate.Value;
purchaseOrder.ShipTo = shipTo.Text;
purchaseOrder.State = helper.ConvertComboBoxIndexToStateIndex(
stateKey.SelectedIndex);
// On cast un autre type pour le forcer à être un ComboBoxItem
var supplierItem = (ComboBoxItem)supplierId.SelectedItem;
purchaseOrder.SupplierId = supplierItem.Id;
dataContext.SubmitChanges();
}
}
也许如果你发布了一些代码,我们将能够帮助 – 2011-01-27 15:56:40
我看不到我应该发布的代码。问题不是直接在代码中,因为这是非常简单的代码。我只想知道这是否曾发生过别人,如果是,那么该如何解决。 – TomShreds 2011-01-27 16:06:08
我在执行SubmitChanges时遇到了代码,你知道上下文吗?是否附属实体?等 – 2011-01-27 16:08:24