簡體   English   中英

按名稱切換DbSet

[英]Switching DbSet by name

我一直在尋找答案幾個小時。 我已經閱讀了許多類似的文章,但仍然無法達到目的。 在對ASPNET MVC網站進行地理定位時,我需要根據用戶ip在“ n”個表之間切換。 所有表都被命名為“ GeoData_”,加上方便的countryCode后綴(IT,FR,US ...)。 此外,由於它們都包含相同的字段,因此它們從相同的“ GeoData”接口繼承。

我知道我可以通過以下方式在控制器中獲得所需的dbset:

string countryTable = "GeoData_" + Server.HtmlEncode(Request.Cookies["_country"].Value.ToUpper());

        var type = Assembly.GetExecutingAssembly()
                .GetTypes()
                .FirstOrDefault(t => t.Name == countryTable);

        DbSet GeoContext = db.Set(type);

現在,我無法像以前使用的那樣傳遞此DbSet,即

var searchResult = GeoContext
                    .Where(c => c.PlaceName.ToUpper().Contains(term.ToUpper()))
                    .Select(c => new
                    {
                        PlaceName = c.PlaceName,
                        PostalCode = c.PostalCode,
                        GeoDataID = c.ID,
                        Latitude = c.Latitude,
                        Longitude = c.Longitude
                    }
                    )
                    .Distinct()
                    .OrderBy(c => (c.PlaceName.ToUpper().IndexOf(term.ToUpper())))
                    .ToList();

因為無法再將模型的字段(例如c.Placename等)引用到GeoContext。

我想一種方法可以使用System.Linq.Dynamic並因此更改整個查詢。 有沒有辦法利用從同一接口繼承的所有表來獲得更好的解決方法?

嘗試像明確定義DbSet類

DbSet<Class> GeoContext = db.Set<Class>(type);

我猜你在代碼的某個地方定義了這個類

暫無
暫無

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

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