我正在使用流利映射的一些probs.我有一个实体与实体的子集合,例如Event和EventItems.
如果我将集合的级联映射设置为AllDeleteOrphan,则在将新实体保存到数据库时会出现以下错误:NHibernate.HibernateException:拥有实体实例不再引用具有cascade ="all-delete-orphan"的集合:Core.Event.EventItems
如果我将级联设置为All,它可以正常工作吗?以下是我的类和映射文件:
public class EventMap : ClassMap<Event>
{
public EventMap()
{
Id(x => x.Id, "Id")
.UnsavedValue("00000000-0000-0000-0000-000000000000")
.GeneratedBy.GuidComb();
Map(x => x.Name);
HasMany(x => x.EventItems)
.Inverse()
.KeyColumn("EventId")
.AsBag()
.Cascade.AllDeleteOrphan();
}
}
public class EventItemMap : SubclassMap<EventItem>
{
public EventItemMap()
{
Id(x => x.Id, "Id")
.UnsavedValue("00000000-0000-0000-0000-000000000000")
.GeneratedBy.GuidComb();
References(x => x.Event, "EventId");
}
}
public class Event : EntityBase
{
private IList<EventItem> _EventItems;
protected Event()
{
InitMembers();
}
public Event(string name)
: this()
{
Name = name;
}
private void InitMembers()
{ …Run Code Online (Sandbox Code Playgroud) 我可以在nhibernate xml的属性访问中使用哪些访问策略?
有人能指出我可能使用的值吗?
一个很好的教程将非常感激.
谢谢
我想刷新一个实体及其所有子集合.做这个的最好方式是什么?我在谈论nhibernate :)
我已经阅读了session.Evict,session.Refresh ...
但我仍然不确定是否喜欢:
RefreshEntity<T>(T entity)
{
session.Evict(entity);
session.Refresh(entity);
}
Run Code Online (Sandbox Code Playgroud)
会完全按照我希望的方式工作
它会起作用吗?如果不是我还能做什么?
我想映射一个导致左外连接而不是内在连接的类.
我的复合用户实体由一个表("aspnet_users")和第二个表中的一些可选属性(如"users"中的FullName)组成.
public class UserMap : ClassMap<User> {
public UserMap() {
Table("aspnet_Users");
Id(x => x.Id, "UserId").GeneratedBy.Guid();
Map(x => x.UserName, "UserName");
Map(x => x.LoweredUserName, "LoweredUserName");
Join("Users",mm=>
{
mm.Map(xx => xx.FullName);
});
}
}
Run Code Online (Sandbox Code Playgroud)
这个映射结果在内连接选择中,所以没有结果出来是第二个表没有数据.我想生成一个左连接.
这只能在查询级别进行吗?
如何在MappingIntegrationTests中作为测试的一部分生成xml映射文件
我需要手动检查流畅的映射是否与leagcy项目中的映射关联.
nhibernate nhibernate-mapping fluent-nhibernate s#arp-architecture
nhibernate中的一对一关系可以延迟加载"false"或"proxy".我想知道是否有人知道如何做一个懒惰的一对一映射.
我通过使用映射到私有字段的惰性集来实现相同的结果,并使公共属性返回该集的第一个结果.它有效,但不是最干净的代码......
提前致谢!
我知道NHibernate 2的一个重大变化是*不再支持NHibernate.Nullables.因此,您在映射文件中使用什么来映射可为空的DateTime?类型?对于ie:
可以理解的是不起作用:
<property name="CreateDate" column="CreateDate" type="DateTime?" not-null="false" />
Run Code Online (Sandbox Code Playgroud)
不再支持:
<property name="ModifiedDate" column="ModifiedDate" type="Nullables.NHibernate.NullableDateTimeType, Nullables.NHibernate" not-null="false"/>
Run Code Online (Sandbox Code Playgroud)
我知道它一定很明显,但我找不到它!
答案很简单:NHibernate会反映出有问题的类,并发现该属性的反射类型是DateTime?一切都靠自己.
谢谢@Justice!
我们有一个带有varchar和nvarchar max列的SQL Server表,如下所示:
CREATE TABLE [dbo].[MyTable](
:
[MyBigUnicodeColumn] [nvarchar](max) NULL,
[MyBigAnsiColumn] [varchar](max) NULL,
:
Run Code Online (Sandbox Code Playgroud)
在创建映射(hbm.xml)文件时,文档说使用StringClob作为数据库类型为DbType.String的大对象的type属性,但它没有说明如果数据库类型是DbType.AnsiString该怎么办.
<class name="MyTable" table="MyTable" lazy="false">
:
<property name="MyBigUnicodeColumn" type="StringClob" />
<property name="MyBigAnsiColumn" type="????" />
:
Run Code Online (Sandbox Code Playgroud)
这适用于NHibernate 3.3.1.
目前的方法
在ASP.NET Web表单应用程序(使用Spring.NET和NHibernate)中,我们有一个聚合根(Person),其详细信息可以在多个屏幕/页面中捕获.的人在进入到该工作流的实体存在,并且对所有变更人对象图是原子的,因此只应在提交最终屏幕的刷新到数据库.
为了实现这一点,我们首次使用NHibernate 3.2将数据库中的Person(懒惰)加载到第一页,然后在我们浏览过程时加载并将序列化的Person对象图保存到HTTP Session变量中.
检索后的人出了HTTP会话,它是从当前的NHibernate会话的分离状态,所以我们重新连接通过调用更新()在当前会话的方法,就像这样:
var sessionPerson = Session[PersonSessionName] as Person;
var currentSession = SessionFactory.GetCurrentSession();
currentSession.Update(sessionPerson);
Run Code Online (Sandbox Code Playgroud)
注意:使用Lock()引发异常,建议"重新关联的对象有脏集".
重新连接时,我们可以按预期遍历对象图,从数据库中提取尚未加载到内存中的子实体的数据.
映射文件的子集
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="Domain" namespace=" TestApp.Domain">
<class name="Person" table="Person">
<id name="Id">
<generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" />
</id>
<property name="Name" not-null="false" />
<bag name="PersonCountries" access="field.camelcase-underscore" cascade="all-delete-orphan">
<key column="PersonId" foreign-key="FK_ PersonCountry_Person" not-null="true" />
<one-to-many class="PersonCountry" />
</bag>
</class>
<class name="Country" table="Country">
<id name="Id">
<generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" …Run Code Online (Sandbox Code Playgroud) 是否有理由不使用dynamic-insert/ dynamic-update用于NHibernate?我问的唯一原因是它似乎是我想要启用的默认设置,而不是我必须配置的东西.
使用这些动态属性时是否有任何问题需要注意?