在我的休息服务中,我真的很喜欢我的约会时间。我想要的就是创建一个像这样的新日期:
Date ter = new Date()
{
StartTime = dto.StartTime,
EndTime = dto.EndTime,
Name = dto.Name,
Place = dto.Place,
Datetype = tera,
Type = dto.Type,
//Squad = new Squad(),
TeamNumber = mannschaft.Id
};
uow.RepDate.Create(ter);
//mannschaft.Dates.Add(ter);
uow.SaveChanges();
我没有创建此日期,而是收到此错误消息:
保存不公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅InnerException。
我的日期实体中没有设置任何外键。发生了什么?
修改
我的日期实体:
public class Date
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Place { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
//public Squad Squad { get; set; }
public virtual Datetype Datetype { get; set; }
[ForeignKey("Datetype")]
public int DatetypeId { get; set; }
public string Type { get; set; }
public virtual ICollection<Participation> Participations { get; set; }
public virtual Squad Squad { get; set; }
public int TeamNumber { get; set; }
}
现在内部异常(日期实体中已更改的字段):
INSERT语句与FOREIGN KEY约束冲突\&#34; FK_dbo.Dates_dbo.Datetypes_DatetypeId \&#34;。冲突发生在数据库\&#34; SchoolDb \&#34;,table \&#34; dbo.Datetypes \&#34;,column&#39; DatetypeId&#39;。\ r \ n该声明已终止
Datetype:
public class Datetype
{
[Key]
public int DatetypeId { get; set; }
public string Name { get; set; }
//public virtual ICollection<Squad> Squads { get; set; }
public int TeamId { get; set; }
}
修改 我想问题就在这里:
Datetype tera=new Datetype();
if (mannschaft != null)
{
if (!dto.DatetypeId.Equals(null)) {
foreach (Datetype termin in mannschaft.Datetypes)
{
if (termin.DatetypeId == dto.DatetypeId)
{
tera = termin;
}
}
每当我测试服务时,我都懒得为日期创建一个Datetype,因此tera是一个空的日期类型。所以外键有几个问题要找到datetype。当我创建一个日期类型时,一切正常。有没有办法让日期类型可选?
答案 0 :(得分:0)
感谢您更新问题
当您将DateType
实体分配给Date
实体时,我们不会为您提供代码。但是,从上下文和错误中可以看出,试图保存DateType
实体的上下文没有从数据库中查询Date
实体。因此,它不会被上下文跟踪,当您调用SaveChanges
时,它会尝试插入已存在于数据库中的实体。
以下是您的选择:
使用相同的上下文
DateType
实体
在保存前将DateType
实体附加到当前上下文
不要使用关系分配,而只是分配外键ID
最有效的选择是最后一个:
Date ter = new Date()
{
StartTime = dto.StartTime,
EndTime = dto.EndTime,
Name = dto.Name,
Place = dto.Place,
//Datetype = tera,
DatetypeId = tera.DatetypeId,
Type = dto.Type,
//Squad = new Squad(),
TeamNumber = mannschaft.Id
};
uow.RepDate.Create(ter);
//mannschaft.Dates.Add(ter);
uow.SaveChanges();