- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在X引用Y,Y有很多X的情况下如何配置双向映射,这样当我在Y实例中添加很多X并保存Y实例时,它会工作正常吗?
为了让问题更清楚,这里是代码:
ClientCompany 模型有HasMany
ContactPerson 相关模型:
public class ClientCompany
{
// ....
public virtual ISet<ContactPerson> ContactPeople { get; set; }
}
// mapping:
HasMany(x => x.ContactPeople)
.AsSet()
.Inverse()
.Cascade.All();
ContactPerson 具有引用母公司的不可为空的“ClientCompany”字段:
public class ContactPerson
{
// ....
public virtual ClientCompany ClientCompany { get; set; }
}
References(x => x.ClientCompany).Not.Nullable();
调用这段代码:
sess.Save(new ClientCompany()
{
ContactPeople = new HashSet<ContactPerson>()
{
new ContactPerson()
}
});
导致此异常:
not-null property references a null or transient value xxxx.ContactPerson.ClientCompany
这只是一个简化的案例,我在我的真实项目中使用 AutoMapper,所以手动设置引用不是解决方案
最佳答案
ORM 世界中最重要的想法,即使用 NHibernate 时,是:
ALWAYS set both sides of relation.
这是有效的方式,如何设置两侧:
var person = new ContactPerson();
var company = new ClientCompany
{
ContactPeople = new HashSet<ContactPerson>()
{
person,
},
};
person.ClientCompany = company
sess.Save(company);
通过映射是声明为其关系负责的Person
(反向映射.Inverse()
)。
这意味着它必须设置与其父项的关系。此关系稍后用于 INSERT 语句...并且它不能为空。
无需分别保存公司和个人。 唯一重要和绝对重要的事情是设置两个引用边。这是必须的。
不确定你可以用自动映射器做什么......但是双向设置的某种包装/屏蔽可能是 POCO 对象上的一些特殊方法:
public class ClientCompany
{
// ....
public virtual ISet<ContactPerson> ContactPeople { get; set; }
public virtual AddPerson(ContactPerson person)
{
ContactPeople = ContactPeople ?? new HashSet<ContactPerson>();
ContactPeople.Add(person);
person.ClientCompany = this;
}
}
现在我们只需要在正确的时间调用 AddPerson()
...
关于c# - (流利的)NHibernate : HasMany/References (bidirectional) + Cascade Save,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28930240/
我正在尝试将fluentd与elasticsearch连接起来,并且在启动td-agent服务时遇到此错误。 td-agent.log: 无法与Elasticsearch通信,重置连接并重试。连接被拒
所以我有一个案例,布局已经变得更加复杂。有一些常见的东西,比如 @section styleIncludes{ ... } ,然后是其他部分,这些部分定义了每个页面可以选择(但几乎总是)指定的各种内容
我刚刚看到一个巨大的 Java 正则表达式,它让我对一般正则表达式的可维护性有所思考。我相信大多数人——除了一些糟糕的 perl 贩子——都会同意正则表达式很难维护。 我在考虑如何解决这种情况。到目前
我有一个 12 秒长的 audio.mp3 文件video.mp4 的长度为 60 秒。 我需要在视频的第 40 秒插入audio.mp3。 如何使用 Node-Fluent-ffmpeg 做到这一点
我正在使用 NHibernate + Fluent 来处理我的应用程序中的数据库。到目前为止,我一直在使用 SessionSource 来创建我的 ISession 对象。我现在对来自 NHibern
我在 Java 控制台应用程序中使用 Apache HttpClient 4.5(具有流畅的界面)。我注意到,它的默认超时值似乎是无限的,但我必须为我发送的请求使用非无限的超时值。我想对所有请求使用相
这是我的路线: router.get("answers","delete", Int.parameter) { req -> Future in let answerID = try
我有随机“ session 已关闭!” Autofac 和 Fluent nHibernate 的以下配置错误: 全局.asax.cs: builder.Register(x => new NHibe
我是一名优秀的程序员,十分优秀!