具有值类型的Castle ActiveRecord / NHibernate Linq查询

时间:2010-05-12 10:12:14

标签: linq nhibernate castle-activerecord linq-to-nhibernate

鉴于我们的Active Record Entites和ValueTypes的以下代码,Linq不适用于我们。

[ActiveRecord("Person")]
public class PersonEntity : ActiveRecordLinqBase<PersonEntity>
{
  string _name;

  [Property("Name", Length = 20, ColumnType = "string", 
    Access = PropertyAccess.FieldCamelcaseUnderscore)]
  public  Name Name
  {
  get { return NameValue.Create(_name);}
  set { _name = value.DataBaseValue; }
  }
  ...
}

public abstract class Name : IValueType
{
  string DataBaseValue {get;set;}
  ...
}

public class Namevalue : Name
{
  string _name;
  private NameValue(string name) 
  {
    _name = name;
  }
  public static NameValue Create(string name) 
  {
    return new NameValue(name);
  }
  ...
}

到目前为止,我们尝试以下列方式使用linq但没有成功:

var result = from PersonEntity p in PersonEntity.Queryable 
             where p.Name == "Thomas" select p;
return result.First(); // throws exception Cannot convert string into Name

我们尝试并为Name实现了TypeConverter,但转换器从未被调用过。

有没有办法让linq使用这个ValueTypes?

更新
使用NHibernate.UserTypes.IUserType它有效。我按照此处所述实现了接口:How to implement correctly IUserType?

我仍然需要将一个ConversionOperator从string添加到Name,并且必须在linq语句中显式调用它,即使它被定义为隐式。

var result = from PersonEntity p in PersonEntity.Queryable 
             where p.Name == (Name)"Thomas" select p;
return result.First();  //Now works

0 个答案:

没有答案
相关问题