1

(編集された)ドメインクラスは次のとおりです。

public class Patient : IntegerKeyEntity
{
  ...
  public virtual string LastName
  {
      get
      {
          return Encoding.Unicode.GetString(encryptionService.Decrypt(LastNameEncrypted));
      }
      set
      {
          LastNameEncrypted = encryptionService.Encrypt(value);
      }
  }
  /// <summary>
  /// Contains the encrypted last name. Access via LastName for unencrypted version.
  /// </summary>
  public virtual byte[] LastNameEncrypted { get; set; }
  ...
}

Fluent マッピングは次のとおりです。

public class PatientMap : ClassMap<Patient>
{
  public PatientMap()
  {
    ...
    Map(x => x.LastNameEncrypted, "LastName")
      .Not.Nullable();
    ...
  }
}

私は患者に LastName をマップしません。テーブルには LastName 列 (varbinary) があり、LastNameEncrypted 列はありません。

クエリは次のとおりです。

public virtual IQueryable<TResult> SatisfyingElementsFrom(IQueryable<T> candidates, int start, int limit, string sort, string dir)
{
    if (this.MatchingCriteria != null)
    {
        return candidates.Where(this.MatchingCriteria).OrderBy(sort + " " + dir).Skip(start).Take(limit).ToList().ConvertAll(this.ResultMap).AsQueryable();
    }

    return candidates.ToList().ConvertAll(this.ResultMap).AsQueryable();
} 

リターン (if ブロック内) は、エラーがトリガーされる場所です。エラーには、「患者のプロパティ LastName を解決できませんでした」と表示されます。

NHibernate (v2.1.2.4000)、Fluent NHibernate (v1.1.0.685)、NHibernate.Linq (v1.1.0.1001) を使用しています。これらの DLL を更新できません。

Patient.LastName のマッピングがないためですか? 私は持っていないか、必要としません。それが問題である場合、Fluent NHibernate にそのプロパティを無視するようにマップ/指示するにはどうすればよいですか?

PS: 私は AutoMapping を使用しておらず、明示的なマッピングのみを使用しています。それらは次のようにロードされます。私のアプリケーションでは、cfg (NHibernate.Cfg.Configuration オブジェクト) と mappingAssemblies (マッピングを持つ 1 つの DLL を指す) のみが値を持ちます。

private static ISessionFactory CreateSessionFactoryFor(string[] mappingAssemblies, AutoPersistenceModel autoPersistenceModel, Configuration cfg, IPersistenceConfigurer persistenceConfigurer)
{
    FluentConfiguration fluentConfiguration = Fluently.Configure(cfg);

    if (persistenceConfigurer != null)
    {
        fluentConfiguration.Database(persistenceConfigurer);
    }

    fluentConfiguration.Mappings(m =>
    {
        foreach (var mappingAssembly in mappingAssemblies)
        {
            var assembly = Assembly.LoadFrom(MakeLoadReadyAssemblyName(mappingAssembly));

            m.HbmMappings.AddFromAssembly(assembly);
            m.FluentMappings.AddFromAssembly(assembly).Conventions.AddAssembly(assembly);
        }

        if (autoPersistenceModel != null)
        {
            m.AutoMappings.Add(autoPersistenceModel);
        }

    });

    return fluentConfiguration.BuildSessionFactory();
}
4

1 に答える 1

0

このエラーは、クエリを実行すると発生します。あなたのコードを見ると、問題を引き起こす可能性のあることが1つだけわかります.MatchingCriteriaです:

return candidates.Where(this.MatchingCriteria)...

this.MatchingCriteria に格納される型は何ですか?

インライン条件に置き換えてみてください: in

..Where(<put_inline_criteria_here>)..
于 2013-01-27T08:40:19.207 に答える