|
15 | 15 | using Microsoft.EntityFrameworkCore; |
16 | 16 | using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; |
17 | 17 | using Microsoft.EntityFrameworkCore.Metadata; |
| 18 | +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; |
18 | 19 | using Microsoft.EntityFrameworkCore.Update; |
19 | 20 |
|
20 | 21 | namespace FileContextCore.Storage.Internal |
@@ -185,7 +186,7 @@ private Dictionary<TKey, object[]> InitExcel(string filetype) |
185 | 186 |
|
186 | 187 | UpdateMethod = new Action<Dictionary<TKey, object[]>>((list) => |
187 | 188 | { |
188 | | - excel.Serialize(list); |
| 189 | + excel.Serialize(ConvertToProvider(list)); |
189 | 190 | }); |
190 | 191 |
|
191 | 192 | Dictionary<TKey, object[]> newlist = new Dictionary<TKey, object[]>(_keyValueFactory.EqualityComparer); |
@@ -253,15 +254,40 @@ private Dictionary<TKey, object[]> Init() |
253 | 254 |
|
254 | 255 | UpdateMethod = new Action<Dictionary<TKey, object[]>>((list) => |
255 | 256 | { |
256 | | - string cnt = serializer.Serialize(list); |
| 257 | + string cnt = serializer.Serialize(ConvertToProvider(list)); |
257 | 258 | fileManager.SaveContent(cnt); |
258 | 259 | }); |
259 | 260 |
|
260 | 261 | string content = fileManager.LoadContent(); |
261 | 262 | Dictionary<TKey, object[]> newList = new Dictionary<TKey, object[]>(_keyValueFactory.EqualityComparer); |
262 | | - Dictionary<TKey, object[]> result = serializer.Deserialize(content, newList); |
| 263 | + Dictionary<TKey, object[]> result = ConvertFromProvider(serializer.Deserialize(content, newList)); |
263 | 264 | GenerateLastAutoPropertyValues(result); |
264 | 265 | return result; |
265 | 266 | } |
| 267 | + |
| 268 | + private Dictionary<TKey, object[]> ApplyValueConverter(Dictionary<TKey, object[]> list, Func<ValueConverter, Func<object, object>> conversionFunc) |
| 269 | + { |
| 270 | + var result = new Dictionary<TKey, object[]>(); |
| 271 | + var converters = entityType.GetProperties().Select(p => p.GetValueConverter()).ToArray(); |
| 272 | + foreach (var keyValuePair in list) |
| 273 | + { |
| 274 | + result[keyValuePair.Key] = keyValuePair.Value.Select((value, index) => |
| 275 | + { |
| 276 | + var converter = converters[index]; |
| 277 | + return converter == null ? value : conversionFunc(converter)(value); |
| 278 | + }).ToArray(); |
| 279 | + } |
| 280 | + return result; |
| 281 | + } |
| 282 | + |
| 283 | + private Dictionary<TKey, object[]> ConvertToProvider(Dictionary<TKey, object[]> list) |
| 284 | + { |
| 285 | + return ApplyValueConverter(list, converter => converter.ConvertToProvider); |
| 286 | + } |
| 287 | + |
| 288 | + private Dictionary<TKey, object[]> ConvertFromProvider(Dictionary<TKey, object[]> list) |
| 289 | + { |
| 290 | + return ApplyValueConverter(list, converter => converter.ConvertFromProvider); |
| 291 | + } |
266 | 292 | } |
267 | 293 | } |
0 commit comments