2

私は現在、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");

次に、以下を呼び出して、オブジェクトのインデックスを作成しようとしています。

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Person>>();
solr.Add(mypoco);
solr.Commit();

「solr.Add(person)」のエラーは次のとおりです:「ドキュメントに必須の uniqueKey フィールドがありません: id」。送信されている http リクエストを見ると、これは理にかなっています。リクエストの本文は :<add><doc /></add>です。

フィールドが取得されていないようです。さらに調べてみると、「AttributesMappingManager」は 0 件の結果を返しています。メソッドは以下にあり、「GetPropertiesWithAttribute」から見たコメント付きの結果です。

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

これをテストプロジェクトに分割しようとしましたが、それでも同じ問題が発生します。インターフェイスの有無にかかわらず試してみましたが、まだうまくいきません。本当に単純なものが欠けている可能性がありますが、それが何であるかを知りたいです。

注: github リポジトリの Solrnet の最新バージョンを使用しています。

更新 「SampleSolrApp」ソリューションをテストし、いくつかの参照を修正しました (「HomeController.cs」で SolrNet.DSL が見つからなかった、SolrNet.DSL ref が見つからないようでした、コンパイルされた github リポジトリからの参照を追加しました)、サンプルは正しく初期化されているようです。AddInitialDocuments()Application_Start のメソッドを介して「exampledocs」を投稿します。ただし、「指定されたキーは辞書に存在しませんでした」というエラーが表示された直後に機能します。「HtmlHelperMapperExtensions.cs」内。「Product」オブジェクトに正しい属性があり、マッパーが探しているフィールド名がありますが、フィールドが見つかりません (この場合は「cat」)。これは、SolrField属性が見つからないように見えるため、solrの有効なhttpリクエストを構築していないため、私が抱えている問題と一致します。

サンプルを別の PC でテストして、この問題が開発環境に関係しているかどうかを確認します。アドバイスや提案をいただければ幸いです。

Update 2 別の開発環境でテストしたところ、同じエラーが発生しました。そのため、サンプルでもGetCustomAttributes拡張メソッドが pocos の属性を返していないようです。VS 2012 (.net 4.5、サンプル プロジェクトでは 3.5 をターゲット)、Win7 マシン上の IIS Express でサンプルを実行しています。さらなる調査のために、誰かが私を正しい方向に向けることができることを願っています。

4

2 に答える 2

0

(ユーザーの) エラーは解決されました。これは、奇妙な結果をもたらす単純なミスです。問題の根本的な原因が何であったかはまだ正確にはわかりませんが、サンプル アプリと自分のアプリケーションの両方に使用していたローカルでコンパイルされた DLL は、VS ソリューションから構築されたものであり、機能しませんでした。最初にダウンロードしたときにbuild.batファイルを実行する際に問題が発生しました(実行するとすぐにクラッシュし、ビルドスクリプトではなくローカルマシンに問題がありました)。そのため、ソリューション/プロジェクトから直接ビルドしようとしました。

別の PC に移動して、build.bat ファイルからすべてのライブラリをビルドしました。サンプル アプリが動作するようになり、他のアプリケーションも動作します。

TLDR

Build.batからライブラリをビルドする

于 2013-04-10T01:44:27.277 に答える