FluentNHibernate使用相同的主键映射

Dio*_*rza 1 c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有2个这样的表:

TABLE ARTICLE
Id int NOT_NULL PK
Title nvarchar(50) NOT_NULL

TABLE CONTENT
Id int NOT_NULL PK
content nvarchar(MAX) NOT_NULL
remarks nvarchar(200) 
Run Code Online (Sandbox Code Playgroud)

所以每篇文章都有一个pk id与文章pk id相同的内容,然后我创建了这样的域类:

public class Article {
    public virtual int Id {get; set;}
    public virtual string Title {get; set;}
    public virtual Content Content {get; set;}
}

public class Content {
    public virtual int Id {get; set;}
    public virtual string content {get; set;}
    public virtual string remarks {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我尝试像这样映射这些类:

public class ArticleMap : ClassMap<Article>
{
    public ArticleMap()
    {
        Id(x => x.Id);
        Map(x => x.Title);
        Reference(x => x.Content).ForeignKey("Id");
    }
}

public class ContentMap : ClassMap<Content>
{
    public ContentMap()
    {
        Id(x => x.Id);
        Map(x => x.content);
        Map(x => x.remarks);
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实读了数据到表,但最终得到了NHibernate.ObjectNotFoundException.在我的情况下,我应该如何映射没有外键的类,但只是基于相同的PK Id值加入另一个表.有人可以指导我如何使这件事有效吗?

Car*_*ema 6

由于您正在寻找1:1的关系,因此您的映射需要明确.

首先,内容需要了解其父文章.如果您不想公开该属性,则可以使用protected internal或者可以Reveal在映射中使用.请注意,在这些情况下,您需要一个接受Article的构造函数和一个NHibernate的空构造函数.

public class Content {
     public virtual Article { get; set; }
      //other properties
}
Run Code Online (Sandbox Code Playgroud)

你的映射就像是

public class ArticleMap : ClassMap<Article>
{
   public ArticleMap()
   {
      Id(x => x.Id);
      Map(x => x.Title);
      HasOne(x => x.Content).Cascade.All();
}


public class ContentMap : ClassMap<Content>
{
    public ContentMap()
    {
      Id(x => x.Id).GeneratedBy.Foreign("Article");
      HasOne(x => x.Article).Constrained().ForeignKey();
      Map(x => x.content);
      Map(x => x.remarks);
    }
}
Run Code Online (Sandbox Code Playgroud)

另见:http://marcinobel.com/index.php/fluent-nhibernate-mapping-one-to-on-relation/