繁体   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