предполагая, что у меня есть следующие структуры модели для приложения asp.net mvc 5, использующего сущность framework 6
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 получает 2 автогенерированных столбца внешнего ключа для ContracRevenue и AdvertisingRevenue.
Однако я не хочу их, поскольку они названы странно (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): введение ограничения FOREIGN KEY "FK_dbo.AdvertisementRevenue_dbo.YearsAsAthlete_YearsAsAthleteID" в таблице "AdvertisementRevenue" может вызывать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
** EDIT **
Я отключил функцию каскадного удаления с использованием свободного API, но теперь у меня возникает другое исключение:
Невозможно определить основной конец отношения "GIP.DAL.ContractRevenue_RevenueAmounts". Несколько добавленных объектов могут иметь один и тот же первичный ключ.
Кстати, исключение возникает, когда я пытаюсь засеять кучу информации в базу данных, а затем делать context.SaveChanges()
внизу (делаю это только один раз в конце)