【发布时间】:2015-01-03 05:21:11
【问题描述】:
假设我有以下使用实体框架 6 的 asp.net mvc 5 应用程序的模型结构
class Athlete {
int AthleteID {get; set;}
List<YearsAsAthlete> YearsAsAthlete {get;set;}
}
class YearsAsAthlete {
int YearsAsAthleteID {get;set;}
int AthleteID {get;set;}
[ForeignKey("AthleteID")]
Athlete Athlete {get;set;}
List<ContractRevenue> ContractRevenue {get;set;}
List<AdvertisementRevenue> AdvertisementRevenue {get;set;}
}
class ContractRevenue {
int ContractRevenueID {get;set;}
int YearsAsAthleteID {get;set;}
[ForeignKey("YearsAsAthleteID")]
YearsAsAthlete YearsAsAthlete {get;set;}
List<RevenueAmounts> RevenueAmounts {get;set;}
}
class AdvertisementRevenue {get;set;}
int AdvertisementRevenueID {get;set;}
int YearsAsAthleteID {get;set;}
[ForeignKey("YearsAsAthleteID")]
YearsAsAthlete YearsAsAthlete {get;set;}
List<RevenueAmounts> RevenueAmounts {get;set;}
}
class RevenueAmounts {
int RevenueAmountsID {get;set;}
int AmountPaid {get;set;}
date DateOfPayment {get;set;}
}
当我拥有这样的模型时,这些模型工作得很好,他们有关系,而且一切都像热软糖圣代一样美味。当我运行它时,数据库会创建这些表,并且 RevenueAmounts 表会为 ContracRevenue 和 AdvertisementRevenue 获得 2 个自动生成的外键列。
但是,我不想要这些,因为它们的名字很奇怪 (ContractRevenue_ContractRevenueID),我需要一些方法来访问我的后控制器方法中的foreginkey id 属性,以添加与正确类型的收入相关的新值。
当我将 RevenueAmounts 模型更改为以下内容时:
class RevenueAmounts {
int RevenueAmountsID {get;set;}
int AmountPaid {get;set;}
date DateOfPayment {get;set;}
// ***NOTE adding foreign keys here
int ContractRevenueID {get;set;}
[ForeginKey("ContractRevenueID")]
ContractRevenue ContractRevenue {get;set;}
int AdvertisementRevenueID {get;set;}
[ForeignKey("AdvertisementRevenueID")]
AdvertisementRevenue AdvertisementRevenue {get;set;}
}
我开始遇到异常:
[SqlException (0x80131904):在表“AdvertisementRevenue”上引入 FOREIGN KEY 约束“FK_dbo.AdvertisementRevenue_dbo.YearsAsAthlete_YearsAsAthleteID”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
** 编辑 **
我已经使用 fluent API 关闭了级联删除功能,但是现在我遇到了一个不同的异常:
无法确定“GIP.DAL.ContractRevenue_RevenueAmounts”关系的本金端。多个添加的实体可能具有相同的主键。
顺便说一句,当我尝试将一堆信息植入数据库然后在底部执行context.SaveChanges()(最后只执行一次)时抛出异常
【问题讨论】:
标签: c# mysql asp.net-mvc entity-framework