2016-09-06 2 views
-1

대용량 데이터베이스의 경우 장치와 서버간에 동기화 기능을 만듭니다. 목록 테이블이 많습니다 (드롭 다운/선택 도구의 항목). 나는 코드를 많이 쓰고 싶지 않아 내가 SQLite는에있는 장치에 우아한 해결책 :C# 일반 T 함수 여기서 T는 문자열에서입니다.

을 찾고 있어요 나는 데이터베이스 A의 저장하면

public class NameTable : IBusinessEntity { 
     public int Id { get; set; } = 0; 
     public string Description { get; set; } 
    } 

같은 테이블 목록 정의 장치 구조

public class SyncResult { 
     public int DeviceId { get; set; } 
     public int ServerId { get; set; } 
     public string TableName { get; set; } 
     public string Description { get; set; } 
    } 
처럼 서버로부터 새로운 레코드를 수신 할 때 새로운 레코드 (항목) I 지금이 함수

public int SaveItem<T>(T item) where T : IBusinessEntity { 
     lock (locker) { 
      if (item.Id != 0) { 
       database.Update(item); 
       return item.Id; 
      } 
      else { 
       return database.Insert(item); 
      } 
     } 
    } 

전화

그럼 저장하고 싶습니다 (DeviceId == 0 인 경우 새 레코드를 삽입하거나 기존 항목을 업데이트하고 싶습니다).

내 질문은 : 어떻게 TSyncResult에서 TABLENAME입니다SaveItem 호출 할 수 있습니까?

는 사전에 어떤 도움을 주셔서 감사합니다 (I는 그것을위한 맥주를 제공 할 수 있습니다!)


SaveItemMyDatabase 클래스의 구성원입니다. 기본적으로 내 문제는 문자열로 SaveItem<T> T 전달하는 것입니다.

분명히 내 문제를 설명했는지 알 수 없습니다.

+0

Entity Framework를 사용하고 있습니까? –

+0

이 경우 아니요. Xamarin Forms의 SQLite입니다. – Enrico

+0

T가 문자열이되고 싶습니까? 왜 그냥 문자열을 사용하지? 하나의 유형으로 제한하는 경우 일반적이어서는 안됩니다. – Krythic

답변

0

TableNameType (예 : Dictionary<string,Type>)으로 매핑 할 수 있습니다. Activator 클래스를 사용하여 유형을 구성하십시오. 리플렉션을 사용하여 데이터를 채 웁니다.

+0

감사합니다. 'Activator'를 호출하면 대가로 무언가를받을 수 있습니까? 예를 들어 레코드를 업데이트하려면 현재 레코드를 읽고 업데이트해야합니다. – Enrico

+0

그리고 GetMethod 또는 GetMethodRuntime 또는 다른 것을 선택할 수 있습니까? – Enrico

+0

'IBusinessEntity'에서 모든 유형을 상속하는 경우. 'IBusinessEntity myObj = (IBusinessEntity) Activator.Create (typeNameStr)''SaveItem' 메소드와 같은 것을 인터페이스로 옮길 수 있습니다. –

관련 문제