我一直在搜索這個沒有任何運氣如何解決。我有一個可在我的商店中使用的可用部門列表。由於商店不同,有些部門可能不存在,我想跟蹤每個部門對每個商店有多少擱板空間。什麼是創建這個最好的方法?如何通過代碼首先執行查找表
這裏是我的模型:
public class Store
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; } //StoreNumber
public virtual List<StoreDepartment> StoreDepartments { get; set; }
}
public class StoreDepartment
{
[Key]
public int ID { get; set; }
public int StoreID { get; set; }
public Department Department { get; set; }
public int ShelvingLinealFT { get; set; }
}
public class Department
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; } //DepartmentNumber
public string Name { get; set; }
public bool InActive { get; set; }
}
我已經填充我部表,但是當我嘗試保存StoreDepartment對象,我得到一個錯誤,指出它無法插入行,因爲它試圖創建一個重複的密鑰。這就像它試圖創造一個新紀錄。
任何幫助,將不勝感激。
下面是我的DbContext代碼:
public class StoresRepository:DbContext
{
public DbSet<Store> Stores { get; set; }
public DbSet<StoreDepartment> StoreDepartments { get; set; }
public DbSet<Department> Departments { get; set; }
}
這裏是我的保存方法:
/// <summary>
/// Saves a StoreDepartment Object to the store("dept.storeid")
/// Adds a new record if ID is 0
/// </summary>
/// <param name="dept"></param>
/// <returns></returns>
public bool Save(StoreDepartment dept)
{
bool retval = false;
try
{
using (var db = new StoresRepository())
{
if (dept.ID.Equals(0))
{
//Add Store Department
db.StoreDepartments.Add(dept);
}
else
{
//this is an update
StoreDepartment department = db.StoreDepartments.Where(p => p.ID.Equals(dept.ID)).FirstOrDefault();
department.Department = dept.Department;
department.ShelvingLinealFT = dept.ShelvingLinealFT;
}
int rowsupdated = db.SaveChanges();
retval = true;
}
}
catch (Exception ex)
{
Utils.Trace(string.Format("StoresContext.cs: StoreDepartments.Save(). ID:{1}. Exception: {0}", ex, dept.ID), Utils.ErrorTypes.Error);
}
return retval;
}
我其實不認爲這是問題。我的保存方法需要一個「StoreDepartment」參數並嘗試保存它。它不斷嘗試重新添加部門,而不是通過id引用它。 – user2259709