gpt4 book ai didi

.net - Fluent NHibernate Cascade 问题 - 尝试插入 NULL ID

转载 作者:行者123 更新时间:2023-12-03 23:20:16 27 4
gpt4 key购买 nike

我有以下模型和映射(下面的代码片段)。

一场比赛从一开始就必须有多个与之相关的比赛答案(多项选择)。

目前,使用如下所示的 Fluent NHibernate 映射,当我创建一个全新的 Competition 对象,填充属性,然后创建 3 个全新的 CompetitionAnswer 对象并将它们添加到 CompetitionAnswers 属性(竞争属性)时,我希望调用 Save在将 1 Competition 行和 3 CompetitionAnswer 行插入数据库的 session 上。

但是,当我尝试在 session 中调用 Save 时,它​​会提示 CompetitionId 为 null,并且它无法将 null 插入到该字段的 CompetitionAnswers 表中 - 这是正确的,但它不应该,但是,我认为NHibernate 会先创建 Competition,然后在 CompetitionAnswers 表中使用新生成的 IDENTITY 值(CompetitionId)?

比赛(模特)

public virtual int CompetitionId { get; private set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual IList<CompetitionAnswer> CompetitionAnswers { get; set; }

竞赛答案(模特)
public virtual int CompetitionAnswerId { get; set; }
public virtual string Answer { get; set; }
public virtual Competition Competition { get; set; }

CompetitionMap (Fluent NHibernate Mapping)
public CompetitionMap()
{
Id(x => x.CompetitionId)
.GeneratedBy.Native();
Map(x => x.Title);
Map(x => x.Description);
HasMany(x => x.CompetitionAnswers)
.Cascade.AllDeleteOrphan()
.KeyColumn("CompetitionId")
.Inverse();
Table("Competitions");
}

CompetitionAnswerMap (Fluent NHibernate Mapping)
public CompetitionAnswerMap()
{
Id(x => x.CompetitionAnswerId)
.GeneratedBy.Native();
Map(x => x.Answer);
References(x => x.Competition)
.Column("CompetitionId");
Table("CompetitionAnswers");
}

这是我用来测试此场景的一些示例代码,它会生成错误:
Competition c = new Competition();

c.Description = "Description";
c.Title = "Title";

CompetitionAnswer a1 = new CompetitionAnswer { Answer = "Answer 1" };
CompetitionAnswer a2 = new CompetitionAnswer { Answer = "Answer 2" };
CompetitionAnswer a3 = new CompetitionAnswer { Answer = "Answer 3" };

c.CompetitionAnswers.Add(a1);
c.CompetitionAnswers.Add(a2);
c.CompetitionAnswers.Add(a3);

session.Save(c);

我一尝试保存就得到的确切错误是:

Cannot insert the value NULL into column 'CompetitionId', table 'CompetitionAnswers'; column does not allow nulls. INSERT fails. The statement has been terminated.



谁能解释一下为什么这目前不起作用?

最佳答案

References(x => x.Competition)
.Column("CompetitionId")
.Not.Nullable(); //add this

并且还要确保除了将 child 放在其集合中的 parent 之外, child 还指向 parent 。当父级为逆时,这是必需的。
a1.Competition = c; 

是那个栏目 non null在数据库端但在 NH 端映射为可为空?

关于.net - Fluent NHibernate Cascade 问题 - 尝试插入 NULL ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com