簡體   English   中英

如何清空EntityFramework DbContext?

[英]How to empty an EntityFramework DbContext?

我如何在不了解其內部對象和類型的情況下清空任意DbContext (擦數據庫)

不幸的是,沒有通用的方法可以做到這一點。 但這很有用,即在針對本地測試數據進行測試時。

我能夠通過非常復雜的方式使用反射來解決它。 看起來很奇怪,但是由於C#不支持Java<?>這樣的通用通配符,我們是否需要一個通用方法並通過反射對其進行調用。 當然,該解決方案的執行速度很慢,但對於本地測試,調試和開發問題而言,其速度已足夠快。

    public static void GenericRemoveSet<T>(System.Data.Entity.DbSet<T> set) where T:class
    {
        foreach (var item in set) set.Remove(item);
    }

    public static void ClearGenericDbContext(DbContext context)
    {
        var removeMethod = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.GetMethod("GenericRemoveSet");
        foreach (var prop in context.GetType().GetProperties().Where(p => p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(System.Data.Entity.DbSet<>)))
        {
            var typedRemove = removeMethod.MakeGenericMethod(prop.PropertyType.GetGenericArguments().First());
            typedRemove.Invoke(null, new object[]{prop.GetValue(context)});
        }
        context.SaveChanges();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM