У меня есть контекст моей инфраструктуры Entity, подделанный с использованием рамки Effort. Я использую столбец с типом XML для хранения данных. По-видимому, «Усилия» не могут справиться с этим. Как я могу обойти это? Все предложения приветствуются!XML-столбец с использованием Effort
0
A
ответ
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);
}
}
}
}
Надеюсь, это поможет.
Усилия не поддерживают тип данных xml. Чтобы проверить остальную модель, вы можете определить тип строки для этого столбца или вообще не определять в тестовой среде (https://github.com/tamasflamich/effort/issues/10#issuecomment-228719218) , –
@AndriyTolstoy Спасибо за «взломать». Я скорее не ставил тестовый код конфигурации в моем контексте, но он не имел тестов. – Thijs