我有一对多关系:
对象ReportCategory:
Table("RCA_REPORT_CATEGORY");
Id(r => r.Id, "RCA_ID");
Map(r => r.Name, "RCA_NAME");
HasMany<Report>(r => r.Reports)
.Table("REP_REPORT")
.KeyColumns.Add("REP_RCA_ID").Cascade.None();
对象报告:
Table("REP_REPORT");
Id(r => r.Id, "REP_ID");
Map(r => r.Name, "REP_NAME");
References(r => r.Category, "REP_RCA_ID")
.Cascade.None();
REP_REPORT.REP_RCA_ID上有一个外键,它引用RCA_REPORT_CATEGORY.RCA_ID。
当我删除一个包含Report的ReportCategory时,它可以工作,并且Report Table中的REP_RCA_ID列设置为NULL。 但我不希望这样。我想要抛出一个异常并告诉我该类别不能被删除,因为它被报告使用并且它违反了外键约束。我怎样才能做到这一点?
由于
答案 0 :(得分:2)
使类别引用不可为空:
Table("REP_REPORT");
Id(r => r.Id, "REP_ID");
Map(r => r.Name, "REP_NAME");
References(r => r.Category, "REP_RCA_ID")
.Not.Nullable()
.Cascade.None();
然后数据库列REP_RCA_ID不能为NULL并且尝试删除非空类别将导致SQL异常。首先应该在域模型中避免这种情况,并且只有在应用程序中存在错误时才应抛出db的异常。
也许您应该将HasMany集合标记为反向以避免某些troubles:
Table("RCA_REPORT_CATEGORY");
Id(r => r.Id, "RCA_ID");
Map(r => r.Name, "RCA_NAME");
HasMany<Report>(r => r.Reports)
.Table("REP_REPORT")
.Inverse()
.KeyColumns.Add("REP_RCA_ID").Cascade.None();