簡體   English   中英

C#MVC 4-從單個控制器動作動態調用模型

[英]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()時,可以檢查YourObjectType 您可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM