小编Mat*_*hew的帖子

具有存储过程的代码优先实体框架返回复杂全文搜索的结果

我正在寻找以下场景的设计建议:

我有一个代码优先的EF5 MVC应用程序.我正在构建一个全文搜索功能,它将包含来自许多表的多个加权列.由于我无法使用这些表中的索引创建视图(其中一些包含文本/二进制列),因此我创建了一个存储过程,该过程将输出我的对象的ID(例如.PersonID)以及与该对象关联的排名.搜索条件.

我目前的方法是创建一个辅助类来执行全文搜索,该搜索调用存储过程并根据返回的ID加载来自上下文的所有对象.

我的问题是:

  1. 我的方法是否合情合理/遵循合理的最佳做法?
  2. 有没有其他人做过类似的经验教训?
  3. 有没有办法更有效地执行此操作(即将存储过程的结果直接返回/映射到实体而无需额外的查找?)

UPDATE

将我的详细实现从问题编辑转移到自己的答案中,更符合经常推荐的内容@ meta.stackexchange.com

c# full-text-search stored-procedures entity-framework

16
推荐指数
2
解决办法
1万
查看次数

奇怪的MVC问题

我遇到以下代码时遇到问题:

@Html.RenderPartial("_SortDisplayPage", new ViewDataDictionary { { "bottomClass", "pagingBottom" } })
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

Cannot implicitly convert type void to object
Run Code Online (Sandbox Code Playgroud)

我觉得它很小但却找不到......

asp.net-mvc

12
推荐指数
2
解决办法
6735
查看次数

查询缓存在本地设置上,但从不在服务器上?

我在项目的查询缓存上遇到了很多麻烦:我运行的是Percona的MySQL版本,在我的本地开发机器上和生产服务器上运行相同的版本.现在,启用查询缓存可以在我的本地计算机上获得出色的结果:几乎所有应该缓存的查询都是有效的.

现在,生产服务器上没有缓存完全相同的查询.一切都完全一样; mysql变量,数据库内容,代码库,登录用户,但是在生产过程中,只有少数查询被缓存,最重要的查询都被跳过.我无法弄清楚为什么:-)

因此,寻找解决方案,我正在使用以下查询,用于从主题表中选择最新的3个主题:(这是最"重"的查询,是我绝对想要缓存的那个!)

SELECT `topic`.* FROM `topics` AS `topic` 
LEFT OUTER  JOIN `topics` AS `topic_helper` 
 ON (`topic`.`id` = `topic_helper`.`id` 
      AND `topic_helper`.`created_on` < `topic`.`created_on`) 
GROUP BY `topic`.`id` HAVING COUNT(*) < 3 
ORDER BY `topic`.`created_on` DESC;
Run Code Online (Sandbox Code Playgroud)

所以,首先,SHOW VARIABLES LIKE '%query_cache%给我相同的结果,无论是本地还是生产:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 10485760 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate …
Run Code Online (Sandbox Code Playgroud)

mysql caching percona

10
推荐指数
1
解决办法
528
查看次数

在数据库中存储多项选择调查答案的最佳方式

我目前正在使用PHP/MySQL开发调查创建/管理Web应用程序.我已经经历了数据库表的几个修订,我再次发现我可能需要重新考虑某种类型的答案的存储.

现在,我有一个看起来像这样的表:

survey_answers

id          PK
eid
sesid
intvalue    Nullable
charvalue   Nullable
Run Code Online (Sandbox Code Playgroud)

id =分配给每一行的唯一值

eid =此答案的回答调查问题

sesid =调查"会话"(有关调查时间和日期的信息)id

intvalue =如果是数值,则为答案的值

charvalue =答案的值,如果它是文本表示

这使我能够继续使用MySQL的数学函数来加速处理.

然而,我发现了一个新的挑战:存储具有多个响应的问题.一个例子是:

您喜欢吃以下哪种食物?(选择所有申请)

  • 女童子军饼干
  • 培根
  • 玉米
  • 鲸鱼脂肪

现在,当我想存储结果时,我不确定处理它的最佳方法.目前,我有一个表只是为了多选项,看起来像这样:

survey_element_options

id        PK
eid
value
Run Code Online (Sandbox Code Playgroud)

id =与每行关联的唯一值

eid =与此选项关联的问题/元素

value =该选项的文本值

通过此设置,我将返回的多个选择答案存储在'survey_answers'中,作为在调查中选择的element_options行的逗号分隔id的字符串.(即类似"4,6,7,9")我想如果这确实是最好的解决方案,或者如果它是更实际的创建新表,将持有每个答案选择,然后引用回给定的答案行反过来引用回到元素并最终引用调查.


编辑

对于任何感兴趣的人,这是我最终采取的方法(在PhpMyAdmin关系视图中):

数据库关系和表结构

收集多选问题的计数的基本查询如下所示:

SELECT e.question AS question, eo.value AS value, COUNT(eo.value) AS count
FROM survey_elements e, survey_element_options eo, survey_answer_options ao
WHERE e.id = 19
AND eo.eid = e.id
AND ao.oid = eo.id
GROUP BY eo.value
Run Code Online (Sandbox Code Playgroud)

mysql sql database

8
推荐指数
1
解决办法
1万
查看次数

修复 - System.Net.WebException:远程服务器返回错误:(500)语法错误,命令无法识别

我创建了FTP代码来传输文件.此代码工作正常,但它有时会导致错误500.确切的错误是 -

Error: System.Reflection.TargetInvocationException: Exception has 
been thrown by the target of an invocation. 
---> System.Net.WebException: The remote server returned an error: 
(500) Syntax error, command unrecognized.
   at System.Net.FtpWebRequest.CheckError()
   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.CommandStream.Abort(Exception e)
   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
   at System.Net.FtpWebRequest.GetRequestStream()
   at ST_772dn22cj49ndfddatee.csproj.ScriptMain.Main()
   --- End of inner exception stack trace --- 
Run Code Online (Sandbox Code Playgroud)

我注意到加载最大文件时出现错误,即大约290 KB.所有其他文件都不到这个,我也没有例外.我不知道为什么会这样.有人可以告诉我为什么吗?

顺便说一句,如果您发现我的代码或逻辑错误有一些改进空间,那么请同时提及.我不是真的在寻找代码评论,但欢迎.

public void Main()
{

    Boolean conditions = true;

    if(conditions == true)
    {
    string fileLocation = "my windows directory";
    string fileName = "fileName.extension";

    string ftpFolder = @"/ftpFolder/";
    Boolean …
Run Code Online (Sandbox Code Playgroud)

.net c# ftp ftpwebrequest .net-3.5

7
推荐指数
1
解决办法
2万
查看次数

g++: Disable specific "deprecated or antiquated header" how?

We're using g++ 4.4.3, and one of our third-party libraries is causing the lovely error

/usr/include/c++/4.4/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated.

Since it's a third-party library, I can't fix the problem, so I just want …

warnings g++ deprecated

6
推荐指数
1
解决办法
2026
查看次数

MySQL - 一组时差的SUM

我想总结所有时间差异,以显示志愿者的总工作时间.获得时间差的结果集很容易:

Select timediff(timeOut, timeIn) 
FROM volHours 
WHERE username = 'skolcz'
Run Code Online (Sandbox Code Playgroud)

它给出了按小时计算的时间列表,但是我希望将它总计为总计.

所以如果结果集是:

12:00:00
10:00:00
10:00:00
08:00:00
Run Code Online (Sandbox Code Playgroud)

这将只有40个小时.

这有一种方法可以做:

SELECT SUM(Select timediff(timeOut,timeIn) 
FROM volHours 
WHERE username = 'skolcz') as totalHours
Run Code Online (Sandbox Code Playgroud)

mysql sql aggregate-functions

6
推荐指数
1
解决办法
7627
查看次数

将存储过程提交到SVN存储库

我目前用于C#项目的开发环境是Visual Studio,带有SQL Server数据库并使用VisualSVN连接到我的SVN存储库.要管理我的存储过程,视图等的修订,我将ALTER脚本保存到我的SVN客户端监视的文件夹中,以便这些文件包含在存储库中.

我已签出一些(现在年纪大了)的职位像这样的(如何保持存储过程等脚本SVN /其他库?以及是否有一个SVN插件,用于SQL Server Management Studio中2005或2008? ),并已经看到了一个推荐这些工具:http://www.red-gate.com/products/sql-development/sql-source-control/http://www.zeusedit.com/agent/ssms/ms_ssms.html.

由于我很少使用进行大量数据库端编程的项目,这从来就不是一个主要的麻烦(一个文件夹中的十几个脚本有一些命名方案并不需要手动管理),但我刚刚继承了几百个项目视图和1000多个存储过程从未包含在版本控制中.

我的问题是:

其他人管理SQL Server代码版本化的过程是什么?我在这里缺少一个被接受的,聪明的或其他明显的方法吗?我目前倾向于购买上述工具之一 - 但在我这样做之前,我正在寻找社区的建议.

我意识到这可能导致工具推荐而不是代码解决方案,但发布到SO,因为我认为这是适当的群体问这个.

svn sql-server ssms

6
推荐指数
1
解决办法
2596
查看次数

tomcat7 maven插件部署失败

我在部署到远程机器时遇到了麻烦,并将tomcat作为服务安装.我的tomcat用户如下:

<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="admin" roles="tomcat, admin, manager-gui, manager-script"/>

</tomcat-users>
Run Code Online (Sandbox Code Playgroud)

我的settings.xml是:

<settings>
<pluginGroups>
<pluginGroup>org.apache.tomcat.maven</pluginGroup>
</pluginGroups>
<servers>
<server>
  <id>tomcat7</id>
  <username>admin</username>
  <password>admin</password>
</server>

</servers>

</settings>
Run Code Online (Sandbox Code Playgroud)

我的pom.xml有以下内容:

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <server>tomcat7</server>
                    <url>http://localhost:8081/manager/text</url>
                    <warFile>target/editor-${project.version}.war</warFile>
                </configuration>
Run Code Online (Sandbox Code Playgroud)

而且我继续在maven控制台的输出上获得401 Unauthorized.你能告诉我我做错了什么吗?

deployment tomcat maven tomcat7

4
推荐指数
1
解决办法
1万
查看次数

使用带有枚举的Foolproof RequiredIf

我们正在尝试使用Foolproof验证注释[RequiredIf]来检查是否需要电子邮件地址.我们还创建了一个枚举,以避免在ViewModel中使用查找表ID.代码如下所示:

public enum NotificationMethods {
        Email = 1,
        Fax = 2
}
Run Code Online (Sandbox Code Playgroud)

然后在ViewModel中:

[RequiredIf("NotificationMethodID", NotificationMethods.Email)]
public string email {get; set;}
Run Code Online (Sandbox Code Playgroud)

在此Senario中,当电子邮件未填充但选择作为通知类型时,我们不会收到错误.相反,这可以按预期工作:

[RequiredIf("NotificationMethodID", 1)]
public string email {get; set;}
Run Code Online (Sandbox Code Playgroud)

我发现的唯一的另一个参考是:https://foolproof.codeplex.com/workitem/17245

c# enums data-annotations foolproof-validation

4
推荐指数
1
解决办法
2820
查看次数

C#Generic List foreach OutofMemoryException

我有一个程序,从数据库中读取大约200万行到List.每行是包含地理坐标等信息的位置.

将数据添加到List后,我使用foreach循环并获取坐标以创建kml文件.当行数很大时,循环遇到OutOfMemoryException错误(但是否则完美地工作).

有关如何处理此问题的任何建议,以便程序可以处理非常大的数据集?kml库是SharpKML.

我还是C#的新手,所以请放轻松!

这是循环:

            using (SqlConnection conn = new SqlConnection(connstring))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand(select, conn);

            using (cmd)
            {
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    double lat = reader.GetDouble(1);
                    double lon = reader.GetDouble(2);
                    string country = reader.GetString(3);
                    string county = reader.GetString(4);
                    double TIV = reader.GetDouble(5);
                    double cnpshare = reader.GetDouble(6);
                    double locshare = reader.GetDouble(7);

                    //Add results to list
                    results.Add(new data(lat, lon, country, county, TIV, cnpshare, locshare));
                }
                reader.Close();
            }
            conn.Close();
        }

            int count = results.Count();
            Console.WriteLine("number of …
Run Code Online (Sandbox Code Playgroud)

c# foreach out-of-memory generic-list sharpkml

3
推荐指数
1
解决办法
1549
查看次数

在MySQL中,UNIQUE varchar也必须是PRIMARY KEY吗?

我在MySQL的1个表下有2个唯一值.

|id (PK)|varchar(255) UNIQUE|
-----------------------------
|   1   |      1234abcde    |
|   2   |      5678fghij    |
|   3   |      9012klmno    |
Run Code Online (Sandbox Code Playgroud)

我是否必须将UNIQUE varchar设置为PK,或者仍然可以使用auto_incremented id(int)?这是一种好的还是坏的做法?

mysql sql

2
推荐指数
1
解决办法
473
查看次数

PHP脚本在>(不是?>)之后结束

我有一个非常烦人的错误.在>我的脚本结束后.

<html>
<body>
    <h1>Upload file to see previous upload!</h1>
    <form action="index.php" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file">
    <br>
    <input type="submit" name="submit" value="submit">
    </form>
    <?PHP
            if (isset ($_FILES["file"])) {
                $allowedExts = array("jpeg", "jpg", "png");
                $temp = explode(".", $_FILES["file"]["name"]);
                $extension = end($temp);
                if ((($_FILES["file"]["type"] == "image/jpeg")
                  || ($_FILES["file"]["type"] == "image/jpg")
                  || ($_FILES["file"]["type"] == "image/pjpeg")
                  || ($_FILES["file"]["type"] == "image/x-png")
                  || ($_FILES["file"]["type"] == "image/png"))
                  && ($_FILES["file"]["size"] < 1048576)
                  && in_array($extension, $allowedExts)) {
                    if ($_FILES["file"]["error"] > 0) {
                        echo "Error: Couldn't upload file!"; …
Run Code Online (Sandbox Code Playgroud)

php

0
推荐指数
1
解决办法
92
查看次数