C#MVC 4-从单个控制器动作动态调用模型
本文关键字:动态 调用 模型 控制器 单个 C#MVC | 更新日期: 2023-09-27 18:26:47
我有一个Admin控制器,它需要从大约多个不同的模型中删除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);
}