[英]C# MVC 4 - Dynamically calling models from a single controller action
我有一個管理員控制器,需要從大約多個不同的模型中刪除UID。 我可以通過傳遞字符串來選擇模型嗎? 這是我想做的一個示例控制器動作(當然這是行不通的):
private ModelEntities db = new ModelEntities();
public ActionResult ConfirmDelete(String ModelNameString, Int32 id)
{
ModelNameString data = db.ModelNameString.Find(id);
return View(data);
}
還有其他方法可以將所有模型的標准任務組合成一個控制器動作? 謝謝。
如討論的那樣,實現一個接口(例如IDynamicTable)並使用映射文件執行數據操作(例如Delete)?
示例:調用YourObject.Delete()時,可以檢查YourObject
的Type
。 您可以在Action
:
public ActionResult ConfirmDelete(IDynamicTable obj)
{
// ...
if (obj is Company)
{
// Delete in company table
return View("Company");
}
if (obj is User)
{
// Delete in user table
return View("User");
}
// ...
}
不要忘記ASP.Net MVC不是PHP + Zend。
如果您擔心在刪除主要參考之后將其他實體留在后面,則應考慮進行級聯刪除。 這意味着,當您使用主鍵刪除主對象時,它將刪除所有其他引用此主鍵的對象。
如果您具有一對多的必需關系,則可以執行此操作以使對象執行級聯刪除。 您可以在模型中的所需關系上添加[Required]
屬性,以便實體框架知道該關系是必需的,或者使用Fluent API。
public class Product
{
public Guid ProductId { get; set; }
[Required]
public Category Category { get; set; }
}
流利的API
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasRequired(p => p.Category).WithMany();
}
如果您的關系是可選的,但您希望級聯刪除,則可以執行以下操作:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasOptional(p => p.Category).WithMany().WillCascadeOnDelete(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.