我有一个像这样的值对象:
public class PersonMapping : ComponentMap<Person>
{
public PersonMapping()
{
Map(x => x.FirstName).Not.Nullable().Length(96);
Map(x => x.LastName).Not.Nullable().Length(96);
Map(x => x.MiddleName).Nullable().Length(96);
Map(x => x.NickName).Nullable().Length(64);
}
}
我创建了一个类似的查询:
var owner = new Person("Anneliese", "ObjectOfficer_1");
var query = NhSession.Query<ServiceContract>()
.Where(s => s.ObjectOfficer.Manager == owner);
contracts = query.ToList();
这会创建一个Person
的实例,其中包含null
MiddleName和昵称。 NHibernate创建一个如下查询:
select .....
from .....
where (objectoffi1_.FirstName = @p0
and objectoffi1_.LastName = @p1
and objectoffi1_.MiddleName = @p2
and objectoffi1_.NickName = @p3);
@p0 = 'Anneliese' [Type: String (4000)],
@p1 = 'ObjectOfficer_1' [Type: String (4000)],
@p2 = NULL [Type: String (4000)],
@p3 = NULL [Type: String (4000)]
没有记录匹配错误。
当我更改生成的查询并用如下值替换参数时:
...
where (objectoffi1_.FirstName = 'Anneliese' and objectoffi1_.LastName = 'ObjectOfficer_1'
and objectoffi1_.NickName is null and objectoffi1_.MiddleName is null)
它会返回正确数量的结果。有谁知道如何处理这个?如果NHibernate将 field = NULL 而字段为空发送到MS SQL Server,则不会返回任何结果,因为它是错误的TSQL 。有什么想法吗?
答案 0 :(得分:0)
事实证明,不可能在where子句中放置具有可空属性的值对象。您必须在代码中自己关心这些潜在的空值。一旦你逐字段直接比较字段就可以了。这里正确的&#39;版本:
In[1]: import pandas as pd
In[2]: import numpy as np
In[3]: datapoints = 365 * 24 * 12
In[4]: data = pd.DataFrame({"Data": np.random.randn(datapoints)}, index=pd.date_range(start="2015-01-01", freq="5min", periods=datapoints))
In[5]: data = data.between_time("07:00", "18:00")
In[6]: data["Date"] = data.index.date
In[7]: data["Time"] = data.index.time
In[8]: data[:4]
Out[8]:
Data Date Time
2015-01-01 07:00:00 0.890659 2015-01-01 07:00:00
2015-01-01 07:05:00 -0.643869 2015-01-01 07:05:00
2015-01-01 07:10:00 0.267501 2015-01-01 07:10:00
2015-01-01 07:15:00 0.627690 2015-01-01 07:15:00
In[9]: data = data.pivot(index="Time", columns="Date", values="Data")
In[10]: data.iloc[:, 0:4].plot(subplots=True)
Out[10]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x1213316d0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1214b3e90>,
<matplotlib.axes._subplots.AxesSubplot object at 0x120fa7350>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11eb6bf10>], dtype=object)
我认为这不仅仅是不方便而且我不知道其他ORM如EF是否有同样的问题。值对象是DDD的重要构建块。