【发布时间】:2018-11-20 00:36:57
【问题描述】:
我正在尝试向数据库中添加多个实体,但出现此错误:
“保存或接受更改失败,因为多个 'Schema.Domain.DataModels.ActivitySummery' 类型的实体具有相同的主键值。确保显式设置的主键值是唯一的。确保数据库生成的主键是在数据库和实体框架模型中正确配置。使用实体设计器进行数据库优先/模型优先配置。使用“HasDatabaseGeneratedOption”流式 API 或“DatabaseGeneratedAttribute”进行代码优先配置。”
public void CreateNewGeneratedSchema(List<WeekDayViewModel> weekDays, int userId)
{
List<ActivitySummery> savedActivities = _schemaRepository.GetAllActivitySummeries(userId).ToList();
foreach(ActivitySummery activitySummery in savedActivities)
{
_schemaRepository.DeleteActivitySummery(activitySummery.ActivitySummeryId);
}
foreach (WeekDayViewModel weekDay in weekDays)
{
foreach (ActivitySummeryViewModel activitySummeryViewModel in weekDay.ActivitiySummeries)
{
try
{
ActivitySummery activitySummery = new ActivitySummery()
{
ActivityId = activitySummeryViewModel.ActivityId,
WeekDayId = activitySummeryViewModel.WeekDayId,
//Change userId
UserId = 1,
StartTime = activitySummeryViewModel.StartTime,
EndTime = activitySummeryViewModel.EndTime,
ActivityDescription = activitySummeryViewModel.Description,
Activity = _schemaRepository.GetSpecificActivity(activitySummeryViewModel.ActivityId),
WeekDay = _schemaRepository.GetSpecificWeekDay(activitySummeryViewModel.WeekDayId)
};
_schemaRepository.CreateActivitySummery(activitySummery);
}
catch (Exception)
{
throw new Exception("Something went wrong when trying to save the activity summery");
}
}
}
_schemaRepository.Save();
_schemaRepository.Dispose();
}
我知道一种可能可行的解决方案,它是在每次我将一个模型添加到数据库并创建 _schemaRepository 的新实例之后保存和处置 _schemaRepository。但我不确定这是否是正确的方法。我知道我试图保存的每个模型的 pk 为 0,我认为这可能是问题所在。但是它仍然有效并且数据库接受新实体,但我仍然得到异常。
【问题讨论】:
-
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 只使用身份?
-
我没有先使用代码
-
使用 fleunt API 执行此操作,那么您不必关心 Id。
标签: asp.net-mvc entity-framework sql-server-2008-r2