Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有实体框架4的缓存表_C#_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 具有实体框架4的缓存表

C# 具有实体框架4的缓存表,c#,entity-framework,entity-framework-4,C#,Entity Framework,Entity Framework 4,我有一个有很多行的表,那就是products表,当用户搜索网站时,我从这个表中进行选择,我还使用了select中的Include方法,我使用了profiler,我注意到EF生成了一个包含很多内部联接、左联接等的查询 我想做的是使用这个select查询并将结果插入同一数据库中的临时缓存表中,然后我可以创建一个服务,每x分钟更新一次该表 问题是,我如何让EF使用这个缓存表来选择行,这样我就可以只做一个select*,而不是每次使用连接查询products表 谢谢 我很确定EF没有临时表支持——至少是

我有一个有很多行的表,那就是products表,当用户搜索网站时,我从这个表中进行选择,我还使用了select中的Include方法,我使用了profiler,我注意到EF生成了一个包含很多内部联接、左联接等的查询

我想做的是使用这个select查询并将结果插入同一数据库中的临时缓存表中,然后我可以创建一个服务,每x分钟更新一次该表

问题是,我如何让EF使用这个缓存表来选择行,这样我就可以只做一个select*,而不是每次使用连接查询products表


谢谢

我很确定EF没有临时表支持——至少是开箱即用的支持——但它一直在变化

你最好的办法就是做这样的事

dbcontext.Database.ExecuteSqlCommand("...")
…我猜您可以运行任意SQL(我知道大多数东西都可以传入,但我不确定限制,但您可以运行SP、创建索引等)来设置临时表

然后下一步就是做相反的事情,像这样

dbcontext.MyTable.SqlQuery("...").ToList()
…将sql结果映射回您的某个实体,或将未映射的实体映射回字符串或其他内容。(
dbcontext.MyTable.SqlQuery(“…”).ToList()

问题是如何做到这一点-不确定你的具体情况真的。但您可以事先创建一个临时表并将其映射,然后将其用于临时目的

基本上,这是DBA的想法——但EF并不适合这种情况(请参见此处的类似内容),但您可能可以使用上面这样的自定义运行查询

希望能有帮助


编辑:这可能也有帮助,但它更涉及

谢谢你,加加!主要问题是关于其他列名。。。但我想我最终会自己创建某种映射。。。谢谢增加了一个链接-对于一个更大的DB我一年前,我不得不使用自定义ORM得到我所需要的-但EF是在更好的形状,现在更稳定,测试等。如果你发现这个回答一些/大多数你的问题,请考虑把它标记为答案。对于其他人也一样,或者如果需要,编辑问题以说明当前状态、回答的内容和缺少的内容。谢谢