2017-10-28 3 views
-1

나는 데이터 액세스 계층에 대한 하나의 인터페이스를 가지고 있고, 다양한 데이터베이스 (예 : MongoDB를, SQL 서버 등)일반 인터페이스를 사용하는 방법은 무엇입니까?</p> <pre><code>public class MongoDbDataAccess : IDataAccess { public Task InsertEntityAsync<T>(string collectionName, T entity) where T : IData { throw new NotImplementedException(); } } </code></pre> <p>내가 할 수있는 :

public interface IDataAccess 
{ 
    Task InsertEntityAsync<T>(string collectionName, T entity) where T : IData; 
    // the rest 
} 

과 특정 데이터베이스를 구현하려는 예를 들어, 대신 T을 입력 한 다음 InsertEntityAsync() 메서드 내에서 해당 특정 데이터베이스에서 허용하는 형식으로 변환하십시오.

는하지만 내 방법은 내가 StudentEntity 전달하면,이 방법은 첫째 StudentDocument로 변환을 누른 후 일반적인 일 내가 UniversityEntity 전달하면, 방법은 다음 UniversityDocument로 변환 저장하고 당신이 얻을, DB에 저장하려면 생각.

데이터베이스에서 각 데이터를 해당 허용 유형으로 변환하는 일반적인 방법은 무엇입니까?

+0

인터페이스의 의도는 사용 가능한 각 데이터베이스 프레임 워크의 인터페이스 또는 주어진 데이터베이스에서 사용할 수있는 각 엔티티 유형에 대한 인터페이스입니까? –

+0

@ChrisThompson 둘 다 – Blendester

+0

나는 downvotes을 이해하지 못한다. 이게 너무 넓은거야?! – Blendester

답변

0

그것은이 작업을 수행 할 수있는 가장 간단한 방법은 각 유형의 내부 정적 Dictionary<TKey, TValue> 예를 들어, 개체의 각 유형에 대한 변환 정보를 가지고하는 것 같다 :

public class StudentEntity : IData 
{ 
    public static Dictionary<FieldInfo, string> ConversionInfo = new Dictionary<FieldInfo, string> 
    { 
    {fieldinfo1, "database column name 1"}, 
    {fieldinfo2, "database column name 2"}, 
    ... 
    } 
    ... 
} 

당신이 Type.GetField()와의 fieldInfo 얻을 수 있습니다 .

변환을 수행하는 동안이 사전을 반복하여 고려해야 할 모든 필드를 가져와야합니다.

System.Reflection (메타 프로그래밍과 같은 동작을 처리하고 런타임에 유형을 분석하는 C#/.NET의 네임 스페이스)을 파고 들면 정말 못생긴 속도가 될 수 있으므로주의해야합니다. 최소한 당신은 그 들판을 얻을 필요가 있습니다.

이 기술을 사용하는 방법에 대한 대략적이고 기본적인 설명이므로 실제 코드에 어떻게 적용되는지에 따라 정확한 세부 정보를 찾아야합니다.