Ho il mio contesto Entity Framework simulato utilizzando il framework Effort. Sto usando una colonna tipizzata in XML per memorizzare i dati. Apparentemente lo sforzo non può gestire questo. Come posso aggirare questo? Tutti i suggerimenti sono benvenuti!
Ho incontrato lo stesso problema e ho scritto un po 'di codice che passa attraverso il modello di entità framework e rimuove il tipo di colonna xml dal modello.
Ecco un esempio di come usarlo. È sufficiente creare una nuova classe di wrapper DbContext per il codice principale e quindi utilizzarla.
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);
}
}
}
}
Spero che questo ti aiuti.