2016-08-25 64 views
0

我正在使用精簡擴展並且有一個關於class mapper的問題。不幸的是我的大部分表需要一些映射後,他們如不同的模式等使用短小精悍擴展時添加多個地圖

所以我覺得我通常做了很多換出DefaultMapper按下面的:

public Hierarchies HierarchyGetByName(string aName) 
{ 
    Hierarchies result; 

    using (SqlConnection cn = GetSqlConnection()) 
    { 
     cn.Open(); 

     Type currModelMapper = DapperExtensions.DapperExtensions.DefaultMapper; 
     try 
     { 
      DapperExtensions.DapperExtensions.DefaultMapper = typeof(HierarchiesMapper); 
      IFieldPredicate predicate = Predicates.Field<Hierarchies>(f => f.Name, Operator.Eq, aName); 
      result = cn.GetList<Hierarchies>(predicate).FirstOrDefault(); 
     } 
     finally 
     { 
      DapperExtensions.DapperExtensions.DefaultMapper = currModelMapper; 
     } 


     cn.Close(); 
    } 

    return result; 
} 

如果我訪問2表格然後我必須做兩次例如。

有沒有辦法一次添加所有的mapper類來說一個集合,並根據被訪問的表選擇正確的一個?

回答

0

您可以在您的應用程序中添加一組類,將自定義重新映射應用於您的實體。例如,這3個空類將PrefixDapperTableMapper應用於Profile和FileNotificationAdhocRecipient類,而AnotherDifferentTypeOfDapperClassMapper應用於NotificationProfile。

public class ProfileMapper : PrefixDapperTableMapper<Domain.Entities.Profile> 
{ 
} 

public class FileNotificationAdhocRecipientMapper : PrefixDapperTableMapper<Domain.Entities.FileNotificationAdhocRecipient> 
{ 
} 

public class NotificationProfileMapper : AnotherDifferentTypeOfDapperClassMapper<Domain.Entities.NotificationProfile> 
{ 
} 

和存在於單獨的映射器的實際映射代碼(我未顯示AnotherDifferentTypeOfDapperClassMapper但是這將是類似以下)

public class PrefixDapperTableMapper<T> : ClassMapper<T> where T : class 
{ 
    public PrefixDapperTableMapper() 
    { 
     AutoMap(); 
    } 

    //name or schema manipulations in some overrides here. 
} 

只要他們是在同一程序,DapperExtensions會發現和使用它們,或者您可以設置測組件類似代碼:只要他們都是d

DapperExtensions.DapperExtensions.SetMappingAssemblies({ typeof(ProfileMapper).Assembly }) 
+0

所以我所有的AutoClassMapper 類被發現在同一個集會上逍遙法外?與什麼相同的程序集? – TheEdge

+0

您調用cn.GetList方法的同一個程序集。如果你只有一個項目/組裝,這不是問題。我提到過,如果您的解決方案中有多個項目。 –

+1

你不必在調用程序集中放置你的地圖。您可以使用:DapperExtensions.SetMappingAssemblies(new [] {typeof(MyCustomClassMapper).Assembly}); –

相關問題