2

기본 클래스에서 파생 된 테이블이 있습니다. 따라서 파생 테이블은 기본 테이블과 동일한 ID를 갖습니다. 이제 값 인젝터를 사용하여 다른 속성 값 매핑

public class Animal 
{ 
public int AnimalId{get; set;} 
public string Name{get;set;} 
} 

public class Man:Animal 
{ 
//Primary key as well as foreign key will be AnimalId. 
public string Communicate{get;set;} 
} 

,

처럼 데이터베이스에서 기본 키로 ManId을 사용하여 클래스는 ManId가 기본 클래스 AnimalId 있음을 알려 유창하게 API를 사용할 수 있지만, 나는에 사용 ManId을 striaghtway 할 수있는 방법이 없습니다 내 poco 클래스 및 프로그래밍.

그래서 viewmodel을 사용하여 내 클래스와 뷰에서 사용하기 위해 ManId 속성 이름을 지정했습니다. ValueInjector를 사용하여 모델과 뷰 모델간에 매핑합니다.

내가 풀 렸던 문제는 아침 내내 해결책을 찾고 있습니다. valueinjector가 이름이 같지 않으므로 valueinjector가 ManId에 AnimalId를 주입 할 수 없습니다.

해결책이 conventioninjection을 사용하여 기본값을 무시할 수 있음을 알았지 만 올바르게 구현할 수 없습니다.

public class PropertyMismatch:ConventionInjection 
{ 
    protected override bool Match(ConventionInfo c) 
    { 
     return ((c.TargetProp.Name == "ManId" && c.SourceProp.Name == "AnimalId") || 
      (c.SourceProp.Name==c.TargetProp.Name &&       c.SourceProp.Value==c.TargetProp.Value)); 

    } 


} 

아무도 해결책을 안다면 나에게 큰 도움이 될 것입니다. Thanx는 모든 시청자와 해결 자에게 매우 앞서 있습니다.

+0

저를 보정 고맙습니다가 ManId 또는 MainId이 c.TargetProp.Name – KrishnaDhungana

+0

에 오타가 있습니다. –

답변

4

이 시도 :

class Program 
{ 
    static void Main(string[] args) 
    { 
     Animal animal = new Animal() { AnimalId = 1, Name = "Man1" }; 
     Man man = new Man(); 
     man.InjectFrom<Animal>(animal); 
    } 
} 

public class Animal:ConventionInjection 
{ 
    public int AnimalId { get; set; } 
    public string Name { get; set; } 

    protected override bool Match(ConventionInfo c) 
    { 
     return ((c.SourceProp.Name == "AnimalId") && (c.TargetProp.Name == "ManId")); 
    } 
} 

public class Man : Animal 
{ 

    public int ManId { get; set; } 
    public string Communicate { get; set; } 
} 
+1

대단히 고맙습니다. 완벽하게 잘 작동했습니다. 내 솔루션에 대한 작은 수정을 다음과 같이해야했습니다. return ((c.SourceProp.Name == "AnimalId") && (c.TargetProp.Name == "ManId") || (c.SourceProp.Name == c.TargetProp.Name)); –

+0

또한 필자는 Man POCO 클래스에서 위에서 언급 한 오버라이드를 수행하고 구현되지 않은 예외로 Animal POCO 클래스의 override 메서드를 남겨 두었습니다. 따라서 누군가 다른 방법으로 라운드를 시도하면 예외가 throw됩니다. –