Effortを使用したXML列

effort entity-framework

質問

Effortフレームワークを使用して私のEntity Frameworkコンテキストを偽装しました。 XML型の列を使用してデータを格納しています。明らかにこれを処理することはできません。どうすればこの問題を回避できますか?すべての提案は大歓迎です!

人気のある回答

私は同じ問題に遭遇しました。エンティティフレームワークモデルを通り、モデルから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);
                }
            }
        }
    }

お役に立てれば。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ