fluent-nhibernate - 流利的休眠 HasOne WithForeignKey 不起作用

标签 fluent-nhibernate

每当我加载 Task 类时,Document 属性始终为 null,尽管 db 中有数据。

任务类:

public class Task
{
    public virtual Document Document { get; set; }

AutoPersistenceModel 的任务映射覆盖:
public void Override(AutoMap<Task> mapping)
{
    mapping.HasOne(x => x.Document)
        .WithForeignKey("Task_Id");

如您所见,NHProf 所说的正在运行,连接条件错误,WithForeignKey 似乎没有生效。事实上,我可以在上面的代码中写任何字符串,这没什么区别。
FROM   [Task] this_
    left outer join [Document] document2_
    on this_.Id = document2_.Id

它应该是:
FROM   [Task] this_
    left outer join [Document] document2_
    on this_.Id = document2_.Task_Id

如果我破解数据库中的数据以使 id 匹配,则加载数据,但显然这是不正确的 - 但至少它证明它加载了数据。

编辑:在流利的 nhib 源中翻找 XML 会产生以下结果:
<one-to-one foreign-key="Task_Id" cascade="all" name="Document" class="MyProject.Document, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 

编辑:继承人架构:
CREATE TABLE [dbo].[Document](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Task_Id] [int] NOT NULL,

CREATE TABLE [dbo].[Task](
[Id] [int] IDENTITY(1,1) NOT NULL,

有人有什么想法吗?

谢谢

安德鲁

最佳答案

我今天遇到了同样的问题。我相信诀窍不是将 .ForeignKey(...) 与 .HasOne 映射一起使用,而是使用 .PropertyRef(...) 。以下是我如何定义组织(父)与其管理员(子)之间的一对一关系:

HasOne(x => x.Admin).PropertyRef(r => r.Organisation).Cascade.All();

管理员使用其外键对组织进行了简单的引用:
References(x => x.Organisation, "ORAD_FK_ORGANISATION").Not.Nullable();

检索组织时,这将加载正确的管理员记录,并正确级联更新和删除。

关于fluent-nhibernate - 流利的休眠 HasOne WithForeignKey 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/643656/

相关文章:

c# - 流利的 NHibernate : How can i use Int64 as ID?

c# - 为什么我的 NHibernate 查询这么慢?

c# - 找不到组件成员的 getter

asp.net-mvc - NHibernate-无法延迟初始化角色集合

c# - 带有外键的 Fluent NHibernate 子类映射

NHibernate.Validator : when saving entity, 我的自定义消息不可用,如何获取它们?

c#-4.0 - nhibernate CurrentSessionContext.Hasbind 未设置对象引用

c# - Nhibernate:使用已定义的映射调用带有 CreateSqlQuery 的存储过程

c# - nHibernate 转 Json

fluent-nhibernate - Fluent Nhibernate 域驱动设计