我仍然在學習使用MVC的實體框架並嘗試創建一個通用購物網站。我有模型 - 具有一對多關係的類別和產品(例如:產品「IPhone7」將屬於類別「電子」)See Models edmx diagram hereEntity Framework在SaveChanges()上添加不必要的記錄()
問題是每當我添加一個新產品,比如P,屬於類別C中,即使C在類別表中已存在,EF也會自動將新條目C添加到類別表中。我相信問題是EF處理一對多關係的方式。我也嘗試在Category類的categoryName中添加[Index(IsUnique = true)],但它沒有幫助。每次添加產品時,我都不希望EF添加新類別。
下面是我的控制器,視圖,數據層和業務層的代碼片段。
//Controller
public ActionResult SaveCategory(Category c)
{
AdminBusinessLayer adminBL = new AdminBusinessLayer();
adminBL.AddCategory(c);
return RedirectToAction("Index");
}
public ActionResult SaveProduct(Product p, string btnSubmit, string dpdCategories)
{
AdminBusinessLayer adminBL = new AdminBusinessLayer();
Category productCategory = new Category();
List<Category> categoryList = new List<Category>();
categoryList = adminBL.ShowCategory();
foreach (Category c in categoryList)
{
if (c.CategoryName == dpdCategories)
productCategory = c;
}
p.category = productCategory;
p.CategoryId = productCategory.Id;
adminBL.AddProduct(p);
return RedirectToAction("Index");
}
@{
ViewBag.Title = "Admin Functions";
}
@using Flipkart.ViewModels
@using Flipkart.Models
@model AdminViewModel
<form action="/Admin/SaveCategory" method="post">
<h2>Add New Category</h2>
Name: <input type="text" id="txtCategoryName" name="CategoryName" />
<br />
<br />
<input type="submit" name="btnAddCategory" value="Add Category" />
<br />
<br />
<h2>Existing Categories</h2>
<table border="1" cellpadding="5" width="20">
<tr style="background-color:yellowgreen">
<th>Id</th>
<th>Category</th>
</tr>
@foreach (Category c in Model.categoryList)
{
<tr>
<td>@c.Id</td>
<td>@c.CategoryName</td>
</tr>
}
</table>
</form>
<br />
<br />
<br />
<br />
<form action="/Admin/SaveProduct" method="post">
<h2>Add New Product</h2>
Name: <input type="text" id="txtProductName" name="ProductName" />
Category: @Html.DropDownList("dpdCategories",new SelectList(Model.categoryNames,Model))
Price: @Html.TextBox("Price")
<br />
<br />
<input type="submit" name="btnAddProduct" value="Add Product" />
<br />
<br />
<br />
<br />
<h2>Existing Products</h2>
<table border="1" cellpadding="5" width="20">
<tr style="background-color:yellowgreen">
<th>Id</th>
<th>Product</th>
</tr>
@foreach (Product p in Model.productList)
{
<tr>
<td>@p.Id</td>
<td>@p.ProductName</td>
</tr>
}
</table>
</form>
//Data Layer
public class FlipkartContext:DbContext
{
public FlipkartContext() : base("Flipkart")
{
}
public DbSet<Category> Category { get; set; }
public DbSet<Product> Product { get; set; }
public DbSet<Cart> cart { get; set; }
}
下面是將數據保存到數據庫中的業務層:
//Business Layer
public void AddCategory(Category c)
{
FlipkartContext flipkartDBContext = new FlipkartContext();
flipkartDBContext.Category.Add(c);
flipkartDBContext.SaveChanges();
}
public List<Category> ShowCategory()
{
List<Category> categoryList = new List<Category>();
FlipkartContext flipkartDBContext = new FlipkartContext();
categoryList = flipkartDBContext.Category.ToList();
return categoryList;
}
public void AddProduct(Product p)
{
FlipkartContext flipkartDBContext = new FlipkartContext();
flipkartDBContext.Product.Add(p);
flipkartDBContext.SaveChanges();
}
public List<Product> ShowProduct()
{
List<Product> productList = new List<Product>();
FlipkartContext flipkartDBContext = new FlipkartContext();
productList = flipkartDBContext.Product.ToList();
return productList;
}
您是否也可以添加產品類別代碼? – Sefa