use*_*667 4 c# entity-framework
我正在使用Asp.Net MVC并构建电子商务应用程序.
我的数据库中有4个表
Product 其中有 ProductId(PK), Name, Price, StoreId(FK)
Store 其中有 StoreId(PK), Name, CreatedOn
Order 其中有 OrderId(PK), StoreId(FK), OrderDate, OrderTotal
OrderDetail 其中有 OrderDetailId(PK), OrderId(FK), Quantity, UnitPrice, Weight
当我尝试删除单个产品时,它不会给出任何错误并删除产品,如果我删除Order记录它给出了OrderDetails外键的错误,我知道我必须首先删除OrderDetail记录然后删除订单记录.
我的情况是,Store有多个产品,每个商店都有订单,然后订购详细信息.
现在,我不想每次删除单个记录,因为它需要很多时间.我想删除一个STORE,其他表(Product,Order,OrderDetails)中的所有记录也将被删除.我怎样才能做到这一点 ?
我试过这个代码在我的IdentityModel.cs中
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasRequired(s => s.Store)
.WithMany()
.HasForeignKey(d => d.StoreId)
.WillCascadeOnDelete(false); // also tried with TRUE, didn't work
modelBuilder.Entity<Order>()
.HasRequired(s => s.Store)
.WithMany()
.HasForeignKey(d => d.StoreId)
.WillCascadeOnDelete(false); // also tried with TRUE, didn't work
modelBuilder.Entity<OrderDetail>()
.HasRequired(s => s.Order)
.WithMany()
.HasForeignKey(d => d.OrderId)
.WillCascadeOnDelete(false); // also tried with TRUE, didn't work
}
Run Code Online (Sandbox Code Playgroud)
调节器
[HttpPost]
public ActionResult StoreDelete(int? id, Store store)
{
try
{
if (id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
store = db.Stores.Find(id);
if (store == null)
{
return HttpNotFound();
}
else
{
db.Stores.Remove(store);
db.SaveChanges();
return RedirectToAction("ManageStores", "Store");
}
}
catch
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
视图
@using (Html.BeginForm("StoreDelete", "Store", new { id = ViewBag.StoreId }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<h4 class="text-danger">Are you sure you want to delete this store ?</h4>
<br />
@Html.TextBoxFor(m => m.Name, new { @class = "inputboxes texbboxstyle form-control", @readonly = "readonly" })
<br>
@Html.TextBoxFor(m => m.CreatedOn, new { @class = "inputboxes texbboxstyle form-control", @readonly = "readonly" })
<br>
<input type="submit" class="btn-lg btn-danger" style="border-radius:0px; width:200px;" value="Delete" />
}
Run Code Online (Sandbox Code Playgroud)
Imr*_*hur 12
您可以从表中删除多个记录,但顺序如下
var Order = db.Orders.where(x=>x.StoreId == store.StoreId)
var OrderDetail = db.OrderDetails.where(x=>x.OrderId== Order.OrderId)
var Product = db.Products.where(x=>x.StoreId == store.StoreId)
db.Orders.RemoveRange(Order);
db.OrderDetails.RemoveRange(OrderDetail);
db.Products.RemoveRange(Product);
db.Stores.Remove(store);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我希望这个对你有用
| 归档时间: |
|
| 查看次数: |
7620 次 |
| 最近记录: |