2016-08-31 2 views
0

У меня есть контекст моей инфраструктуры Entity, подделанный с использованием рамки Effort. Я использую столбец с типом XML для хранения данных. По-видимому, «Усилия» не могут справиться с этим. Как я могу обойти это? Все предложения приветствуются!XML-столбец с использованием Effort

+0

Усилия не поддерживают тип данных xml. Чтобы проверить остальную модель, вы можете определить тип строки для этого столбца или вообще не определять в тестовой среде (https://github.com/tamasflamich/effort/issues/10#issuecomment-228719218) , –

+0

@AndriyTolstoy Спасибо за «взломать». Я скорее не ставил тестовый код конфигурации в моем контексте, но он не имел тестов. – Thijs

ответ

0

Я столкнулся с одной и той же проблемой, и я написал немного кода, который проходит через модель фреймворка сущности и удаляет тип столбца xml из модели.

Вот пример того, как его использовать. Просто создайте новый класс DbContext для вашего основного кода, а затем используйте его.

public class EffortDbContext : OriginalContext 
    { 
     public EffortDbContext(DbConnection connection) : base(connection, false) 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      RemoveXmlColumnTypeFromModelBuilder(modelBuilder); 
     } 

     /// <summary> 
     /// Removes the XML column type from model builder. 
     /// </summary> 
     /// <remarks>Beware in using this code, here be dragons. It meddles with the internals of the entity model configuration to strip out the XML column type.</remarks> 
     /// <param name="modelBuilder">The model builder.</param> 
     private void RemoveXmlColumnTypeFromModelBuilder(DbModelBuilder modelBuilder) 
     { 
      var _modelConfiguration = modelBuilder.GetType() 
       .GetField("_modelConfiguration", BindingFlags.NonPublic | BindingFlags.Instance) 
       .GetValue(modelBuilder); 

      var _entityConfigurations = (IEnumerable) _modelConfiguration.GetType() 
       .GetField("_entityConfigurations", BindingFlags.NonPublic | BindingFlags.Instance) 
       .GetValue(_modelConfiguration); 

      foreach (object configuration in _entityConfigurations) 
      { 
       var entityConfigurationDictionaryValue = configuration.GetType().GetProperty("Value").GetValue(configuration); 


       var ppc = (IEnumerable) entityConfigurationDictionaryValue.GetType() 
        .GetProperty("PrimitivePropertyConfigurations", BindingFlags.NonPublic | BindingFlags.Instance) 
        .GetValue(entityConfigurationDictionaryValue); 
       foreach (var primitivePropertyConfiguration in ppc) 
       { 
        var primitivePropertyConfigurationValue = primitivePropertyConfiguration.GetType().GetProperty("Value").GetValue(primitivePropertyConfiguration); 
        var columnTypeProperty = primitivePropertyConfigurationValue.GetType().GetProperty("ColumnType"); 
        if (columnTypeProperty.GetValue(primitivePropertyConfigurationValue)?.ToString() == "xml") 
         columnTypeProperty.SetValue(primitivePropertyConfigurationValue, null); 
       } 
      } 
     } 
    } 

Надеюсь, это поможет.