2013-08-07 2 views
1

여러 컨트롤러 모델에 대한 UID를 삭제해야하는 Admin 컨트롤러가 있습니다. 문자열을 전달하여 모델을 선택할 수 있습니까? 여기에 내가하고 싶은 것이의 컨트롤러 액션은 (물론이 작동하지 않습니다)입니다 : 하나의 컨트롤러 행동으로 모든 모델에 대한 표준 작업을 결합 할 수있는 다른 방법이 C# MVC 4 - 단일 컨트롤러 작업에서 모델을 동적으로 호출

private ModelEntities db = new ModelEntities(); 

public ActionResult ConfirmDelete(String ModelNameString, Int32 id) 
{ 
    ModelNameString data = db.ModelNameString.Find(id); 
    return View(data); 
} 

이 있습니까? 고맙습니다.

+1

인터페이스 (예 : IDynamicTable)에 구현하고 매핑 파일로 데이터 작업을 수행하려고 했습니까? – glautrou

+0

저는 C#을 4 일 동안 사용하고 있습니다 (PHP에서 이전). 그래서 저에게 새로운 것입니다. 나는 지금 그것을 확인하고있다. 내 데이터베이스가 이미 제 위치에 있었고이 주된 목표는 코드를 제한하여 15 가지 모델에 대해 15 가지 삭제 작업이 없도록하는 것입니다. – Steven

+0

프로세스를 복잡하게 만들고 ASP.Net MVC 방법을 따르지 마십시오. 아마도 거의 모든 사람들처럼 간단하게 시작하고 플랫폼을 잘 알고 있으면 코드를 향상시킬 수 있습니다. 일반적으로 클래스에 대한 컨트롤러를 만들고이 컨트롤러에서 delete 메서드는 현재 컨트롤러 (클래스)에 연결되므로 요구 사항에 따라 동일한 컨트롤러에서 여러 유형의 개체를 삭제하는 것이 무엇입니까? – glautrou

답변

1

, 인터페이스를 구현 (예 : IDynamicTable) 및 매핑 파일로 데이터 조작 (예 : 삭제)을 수행합니까?

예 : 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 + 젠드 아니라는 것을 잊지 마십시오.

+0

후속 작업을 위해 CRUD 명령을 중앙 집중화하는 또 다른 훌륭한 방법 인 일반 저장소를 사용하고 있습니다. http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle – Steven

+0

링크의 "중요 참고 사항"을보십시오. 업데이트 된 버전 및 이전 버전에 대한 의견이 있습니다. – glautrou

0

기본 참조를 삭제 한 후에 다른 항목을 남겨 두는 것이 염려되는 경우 계단식 삭제를 고려해야합니다. 즉, 기본 키로 기본 객체를 삭제하면이 기본 키를 참조하는 다른 모든 객체가 삭제됩니다.

일대일로 필요한 관계가있는 경우 개체에서 계단식 삭제를 수행 할 수 있습니다. 모델의 필요한 관계에 [Required] 특성을 추가하여 Entity Framework에서 관계가 필요하다는 것을 알거나 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); 
} 
+0

String 변수를 사용하여 모델을 동적으로 선택하려면 컨트롤러 논리가 필요합니다. 어떤 모델도 관계가 없습니다. – Steven