这是(编辑过的)域类:
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),流利的NHibernate (v1.1.0.685)和NHibernate。Linq (v1.1.0.1001)。我无法更新这些dll。
是因为我没有Patient.LastName的映射吗?我没有,也不需要。如果这是问题,我如何映射/告诉Fluent NHibernate忽略该属性?
PS:我没有使用AutoMapping,只有显式映射。它们的加载方式如下。在我的应用程序中,只有cfg(一个NHibernate.Cfg.Configuration对象)和mappingAssemblies(它指向一个具有映射的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();
}
在执行查询时发生此错误。看看你的代码,我只看到一件事可能会导致这个问题-那就是MatchingCriteria:
return candidates.Where(this.MatchingCriteria)...
this.MatchingCriteria中存储的是什么类型?
尝试将其替换为内联条件:in
..Where(<put_inline_criteria_here>)..