2011-11-28 12 views
30

मुझे Nuget (v 1.7) से डैपर के नवीनतम संस्करण में अपग्रेड करने के बाद मुझे कोई समस्या आई है।dapper nuget 1.7 enums mapping

यह हमेशा पहले enums सदस्य (यानी, यह नक्शे में विफल) वापस आते हैं।

मैं डेटाबेस के रूप में MySQL का उपयोग कर रहा हूं।

CREATE TABLE `users_roles` (
    `userId` INT(11) NOT NULL, 
    `roleId` INT(11) NOT NULL, 
    KEY `user_id` (`userId`), 
    KEY `role_id` (`roleId`) 
); 

INSERT INTO `users_roles` (`userId`, `roleId`) VALUES (1, 1); 
INSERT INTO `users_roles` (`userId`, `roleId`) VALUES (2, 2); 

public enum Role { 
    Anonymous = 0, Authenticate = 1, Administrator = 2 
} 

var role = Current.Db.Query<Role>(@"SELECT roleId as Role FROM users_roles 
    WHERE [email protected]", new { id = 2 }).FirstOrDefault(); 

यह डैपर न्यूज v1.6 में अपेक्षित आउटपुट देता है। क्या यह नए संस्करण (1.7) के लिए सही व्यवहार है?

अद्यतन:

कुछ सांत्वना आवेदन और ताजा mvc3 ऑफ साइंस के साथ कुछ परीक्षण करने के बाद मैंने पाया कि साफ-सुथरी enum मानचित्रण के व्यवहार असंगत है जब आप enum सीधे टाइप मैप करें।

हालांकि, एक वर्ग के एक संपत्ति के रूप में एक enum मानचित्रण किसी भी तरह लगातार सही नक्शा

public class User 
{ 
    public int Id { get; set; } 
    public Role Role { get; set; } 
} 

var user = Current.Db.Query<User>(@"SELECT roleId as Role, userId as Id 
    FROM users_roles 
    WHERE [email protected]", new { id = 2 }).FirstOrDefault(); 

user.Role का परिणाम किसी भी तरह की उम्मीद उत्पादन

+0

एक बग की तरह लग रहा; कृपया इसे प्रोजेक्ट साइट –

+1

पर लॉग ऑन करें, धन्यवाद, इसे पहले से लॉग करें ... प्रतिक्रिया –

+0

के लिए प्रतीक्षा कर रहा है यह 10 मई से कोड * में * तय किया गया है। हमने Nuget, AFAIK को फिर से तैनात नहीं किया है। –

उत्तर

1

बग तक रिटर्न देता है मेरी वैकल्पिक हल तय हो गई है अतिरिक्त स्थिति

|| के साथ GetDeserializer विधि को संशोधित करना है। इस प्रकार type.IsEnum

enums के लिए struct deserializer उपयोग करने के लिए:

 private static Func<IDataReader, object> GetDeserializer(Type type, IDataReader reader, int startBound, int length, bool returnNullIfFirstMissing) 
     { 
... 
      if (!(typeMap.ContainsKey(type) || type.IsEnum /* workaround! */ || type.FullName == LinqBinary)) 
      { 
       return GetTypeDeserializer(type, reader, startBound, length, returnNullIfFirstMissing); 
      } 
      return GetStructDeserializer(type, startBound); 

     }