我发现了一些奇怪的东西。假设我有 Car 模型和公司模型。
所以我的 Car 模型有一个 CompanyId 行。
假设我在 Car 的 CompanyId ,然后我 SubmitChanges > DataContext的
这是我的问题: 我的 Car 模型的 CompanyId 会更新。但 Car.Company 关系不是。
因此,如果我将 Car.CompanyId 从 1更改为。然后我输出 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();
}
提交我的更改。
答案 0 :(得分:2)
我认为你的行
purchaseOrder.SupplierId = supplierItem.Id;
应该更像
purchaseOrder.Supplier = supplierItem;
只是猜测属性。
您还可能希望在SaveChanges()之后调用purchaseOrder上的dataContext.Refresh()
答案 1 :(得分:1)
仅更改ID还不足以更改关联的公司对象。您需要加载所需的Company对象并将其分配给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();
答案 2 :(得分:1)
不确定这是否是一个可行的选项,但你总是可以选择接收你的查询,包括你想要的相关实体,并附上它,如下所示:
purchaseOrders = from po in dataContext.PurchaseOrders.Include("Company")
orderby po.PurchaseOrderId ascending
select po;
dataContext.Attach(purchaseOrders);
答案 3 :(得分:1)
您可能想查看this question的答案。
答案 4 :(得分:0)
尝试在每个操作上打开一个单独的DataContext。理想情况下,任何更新操作都应以SubmitChanges AND结束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();
}
}