C# Solrnet未找到SolrField属性

C# Solrnet未找到SolrField属性,c#,solr,attributes,solrnet,C#,Solr,Attributes,Solrnet,我目前正在尝试将Solrnet与我正在从事的一个项目集成,但我甚至无法让Solrnet从一个已填充的POCO生成一个文档。下面是我正在使用的POCO的一个示例 public class Person : ICustomInterface { [SolrField("text")] public string ContactNumber { get; set; } [SolrField("text")] public string ContactFax { get

我目前正在尝试将Solrnet与我正在从事的一个项目集成,但我甚至无法让Solrnet从一个已填充的POCO生成一个文档。下面是我正在使用的POCO的一个示例

public class Person : ICustomInterface
{
    [SolrField("text")]
    public string ContactNumber { get; set; }

    [SolrField("text")]
    public string ContactFax { get; set; }

    [SolrField("text")]
    public string ContactEmail { get; set; }
    [SolrField("text")]
    public string FamilyName { get; set; }
    [SolrField("text")]
    public string GivenName { get; set; }
    [SolrField("text")]
    public string MiddleName { get; set; }
    [SolrField("text")]
    public string Title { get; set; }
    [SolrField("text")]
    public string Gender { get; set; }
    [SolrField("text")]
    public string PlaceOfBirth { get; set; }
    [SolrField("text")]
    public string CountryOfBirth { get; set; }

    [SolrUniqueKey("id")]
    public string Id { get; set; }
}
在尝试使用下面的代码为上面的内容编制索引之前,我正在调用init函数

Startup.Init<Person>("http://localhost:8080/solr-4.1.0");
Startup.Init(“http://localhost:8080/solr-4.1.0");
然后我调用下面的函数来尝试索引该对象

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Person>>();
solr.Add(mypoco);
solr.Commit();
var solr=ServiceLocator.Current.GetInstance();
新增(mypoco);
solr.Commit();
“solr.Add(person)”上的错误是:“文档缺少必需的uniqueKey字段:id”。查看正在发送的http请求,这是有意义的,请求的主体是:

更新 测试了“SampleSolrApp”解决方案,修复了一些引用(在“HomeController.cs”中找不到SolrNet.DSL,SolrNet.DSL引用似乎丢失,从已编译的github repo中添加了引用),示例似乎正确初始化,在应用程序启动时通过
AddInitialDocuments()
方法发布“exampledocs”。然而,在我得到错误“给定的键在字典中不存在”后不久,“HtmlHelperMapperExtensions.cs”中就出现了这种情况。“Product”对象确实具有正确的属性,具有映射程序正在查找的字段名,但找不到任何字段(本例中为“cat”)。这与我遇到的问题相匹配,因为它没有为solr构造有效的http请求,因为它似乎找不到SolrField属性

我们将在另一台PC上测试该示例,看看这个问题是否与我的开发环境有关。如有任何意见或建议,将不胜感激

更新2
在另一个开发环境中测试,我得到了相同的错误。因此,即使在示例中,
GetCustomAttributes
扩展方法似乎也没有返回POCO上的属性。我正在Win7机器上运行VS 2012(.net 4.5,示例项目中的目标是3.5)和IIS Express上的示例。希望有人能为我指出进一步调查的正确方向。

首先,不确定为什么会出现“Document missing mandatory uniqueKey field:id”错误,因为您似乎已经适当地修饰了id属性。由于您没有显示如何创建
mypoco
对象,因此我将检查您是否正在设置Id属性(因为需要提供(且唯一)Id,而不是由Solr自动分配)。另外,我注意到您正在将所有其他字段映射到模式中的
文本
字段。这不是完成此行为的标准实践。您通常会将POCO上的每个属性映射到模式中的一个单独字段(请参见SolrNet项目页面上的示例),并使用模式中的
copyField
指令将所有单独字段移动到公共文本字段中。这允许您在组合的
文本
字段或单个字段上进行搜索,并在单个字段上启用选项,如高亮显示和镶嵌面

有关设置自定义字段和使用copyField的更多详细信息,请查看。此外,由于您有来自GitHub的SolrNet源代码,我建议您运行并检查SampleSolrApp目录中的代码,以便更好地理解SolrNet。您可以通过源父目录中的runsample.bat启动示例。

已解决(用户)错误,这是一个简单的错误,但后果很奇怪。我仍然不确定问题的根本原因是什么,但我在示例应用程序和我自己的应用程序中使用的本地编译DLL都是从VS solutions构建的,无法工作。当我第一次下载build.bat文件时,我在运行该文件时遇到了一些问题(在运行时就崩溃了,本地机器出现了问题,而不是构建脚本),因此我尝试直接从解决方案/项目构建它

移动到另一台电脑,我从build.bat文件构建了所有lib,示例应用程序现在可以运行了,我的其他应用程序也可以运行了

TLDR


Build libs fromBuild.bat

为响应干杯,我将在明天查看样本的运行情况,希望它能说明我做错了什么。感谢关于“copyField”的建议,已经派上用场,这个问题完全是我自己造成的。谢谢你的帮助:)
var props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); //returns properties correctly
var kvAttrs = props.Select(prop => new KeyValuePair<PropertyInfo, T[]>(prop, type.GetCustomAttributes<T>())); // correct number of keys of properties with Solrnet attributes, but values are empty
var propsAttrs = kvAttrs.Where(kv => kv.Value.Length > 0); // 0 results
return propsAttrs; // 0 results