Fluent nhibernate Fluent NHibernate一对一地连接表

Fluent nhibernate Fluent NHibernate一对一地连接表,fluent-nhibernate,join,one-to-one,Fluent Nhibernate,Join,One To One,我认为这是一个比较新的问题。我已经使用NHibernate/FluentNHibernate大约6个月了,我想我已经掌握了一些基本知识。现在我有点力不从心了。我相信这是有记录的,但我已经在谷歌上花了几个小时,还没有完全弄明白 我有一个简单的类,称之为简单: public class Simple { public string Name { get; set;} public string Desc { get; set; } public string Status { get; se

我认为这是一个比较新的问题。我已经使用NHibernate/FluentNHibernate大约6个月了,我想我已经掌握了一些基本知识。现在我有点力不从心了。我相信这是有记录的,但我已经在谷歌上花了几个小时,还没有完全弄明白

我有一个简单的类,称之为简单:

public class Simple
{ public string Name { get; set;}
  public string Desc { get; set; }
  public string Status { get; set;}
}
状态实际上被限制为一小组值中的一个:“活动”、“保留”和“关闭”。在DB模式中,我有一个简单的只读表,名为REVERTIONSTATUS:

CREATE TABLE [dbo].[RetrofitStatus](
[Status] [nvarchar](10) NOT NULL,
[SortOrder] [smallint] NOT NULL,
CONSTRAINT [PK_RetrofitStatus] PRIMARY KEY CLUSTERED 
(
    [Status] ASC
)
简单表上有一个外键约束,以确保Status处于默认状态

状态表的目的是包含SortOrder列,以便我可以(在SQL中)执行此操作

并按显示顺序对结果进行排序(例如,首先是所有活动项,然后是保留项,然后是关闭项,因为我是按逻辑顺序排序的,而不是按字母顺序或任何其他容易识别的顺序)

我的问题是,如何在FNH中建模该对象和关系?我可以将SortOrder属性添加到我的简单定义中,并创建一个表示该属性的视图,但是当我尝试向表中插入新的简单对象时会发生什么?显然,我不想尝试插入SortOrder属性。我想我需要以某种方式使用NHib元素,但我还是不清楚它需要用到哪里,在insert上会发生什么,以及如何用Fluent进行操作


我将尝试尝试尝试尝试尝试反复尝试,但我认为,也许有人知道他们在做什么(我不知道),可以为我指出正确的方向,并为我节省一些时间。谢谢你的帮助。

假设你有一个
简单的
类,修改如下(我不确定你对密钥做了什么):

您可以这样映射:

public SimpleMap : ClassMap<Simple>
{
    Id(x => x.Id).Unique().GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Desc);
    Join("RetrofitStatus", join =>
    {
        join.KeyColumn("Status") 
            .Map(x => x.Status);
        join.Map(x => x.SortOrder).Not.Insert();
    });
}
publicsimplemap:ClassMap
{
Id(x=>x.Id).Unique().GeneratedBy.Native();
Map(x=>x.Name);
Map(x=>x.Desc);
加入(“状态”,加入=>
{
join.KeyColumn(“状态”)
.Map(x=>x.Status);
join.Map(x=>x.SortOrder).Not.Insert();
});
}
我没有测试过这个,但这是它的要点

您可以分别在映射中指定不能使用
Not.Insert()
Not.Update()
插入或更新属性,或者使用
ReadOnly()
既不能插入也不能更新属性

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string Status { get; set; 
    public int SortOrder { get; set; }
}
public SimpleMap : ClassMap<Simple>
{
    Id(x => x.Id).Unique().GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Desc);
    Join("RetrofitStatus", join =>
    {
        join.KeyColumn("Status") 
            .Map(x => x.Status);
        join.Map(x => x.SortOrder).Not.Insert();
    });
}