在Fluent NHibernate中将多对多映射对象映射到多对关系时遇到问题

时间:2019-02-21 20:21:11

标签: fluent-nhibernate

我有一个主管部门的总根。 Administration对象与Forms具有一对多关系。表单与模块具有多对多的关系,但是链接上有一个属性,因此我创建了一个名为FormModule的映射对象,该对象具有Sequence整数的属性。

我已经在配置中使用了Cascade和Inverse设置,但是我想不出正确的组合来允许我保存一个新的Administration对象及其所有相关对象。我在FormModule表上使用了组合键,但是KeyReference似乎没有任何方法可以将其设置为保存模块,并且出现错误

  

对象引用了一个未保存的瞬态实例-在刷新之前保存该瞬态实例,或者将属性的级联操作设置为可以使其自动保存的值。类型:模块

这是课程的代码

SecondClassConverter

以下是Fluent NHibernate配置的代码

static void Main(string[] args)
{
    var json = "{ \"MyStringValue\":\"String Value\", \"MyClassValue\": \"Test\" }";

    var decodedJson = JsonConvert.DeserializeObject<MainClass>(json);

    Console.WriteLine($"decodedJson.MyStringValue: {decodedJson.MyStringValue}");
    Console.WriteLine($"decodedJson.MyClassValue.Value: {decodedJson.MyClassValue.Value}");
    Console.ReadLine();
}

有人知道我为什么收到此错误吗?

1 个答案:

答案 0 :(得分:-1)

in general this complete code reads strange for me, but nethertheless

public virtual Module Module { get; protected set; }

How do you initiate the FormModule? Plz post some code you do this. Otherwise I'd say, if you do not set anyvalue toModuleofFormmodulethe value is null and so nhibernate tells you that it'snull or transient``

var formModule = new FormModule ();
formModule.Module = new Module(); //// this doesn't work with your code because of your protected setter

Imho your mapping is correct afais (besides that composite keys are never a good idea)

If you make the module having a public setter, it you should not get any errors with my code mentioned above