2

当我尝试在表中插入值时出现错误。 _dltype是一个类型的对象BRIDownloadType

using (var db = new BRIDatabase())
{
    foreach (var client in db.BRIClients)
    {
        var todo = new BRIToDo
        {
            BRIClient = client,
            BRIDownloadType = _dltype,
        };
        db.BRIToDos.Add(todo);
    }
    db.SaveChanges();
}

现在我得到错误:

当 IDENTITY_INSERT 为 OFF 时,无法在 BRIDownloadTypes-Table 的身份列中插入显式值。

我的 2 张桌子是

BRI下载类型

public class BRIDownloadType
{
    [Key]
    public int DlTypeId { get; set; }

    [Required]
    [StringLength(15)]
    public string DlType { get; set; }

    public string Username { get; set; }

    public string Password { get; set; }

    public virtual ICollection<BRIToDo> BRIToDo { get; set; }

}

BRITodo

public class BRIToDo
{
    [Key]
    public int ToDoId { get; set; }

    [ForeignKey("BRIClient")]
    public int ClientId { get; set; }

    [ForeignKey("BRITask")]
    public int TaskId { get; set; }

    public virtual BRIClient BRIClient { get; set; }

    public virtual BRITask BRITask { get; set; }

    [ForeignKey("BRIDownloadType")]
    public int DlTypeId { get; set; }

    public virtual BRIDownloadType BRIDownloadType { get; set; }**

}

有趣的是,如果我对我的对象做某事_dltype,我就可以使用它。以下代码正在运行,但我不明白为什么,我正在插入完全相同的对象。

using (var db = new BRIDatabase())
{
    var dl = db.BRIDownloadTypes.FirstOrDefault(c => c.DlTypeId == _dltype.DlTypeId);
    foreach (var client in db.BRIClients)
    {
        var todo = new BRIToDo
        {
            BRIClient = client,
            BRIDownloadType = _dltype,
        };
        db.BRIToDos.Add(todo);
    }
    db.SaveChanges();
}

谁能向我解释一下,为什么最后一种方法有效而第一种方法是抛出该错误?我刚刚添加了行

var dl = db.BRIDownloadTypes.FirstOrDefault(c => c.DlTypeId == _dltype.DlTypeId)

但我仍在插入同一个对象。如果我插入Id对象而不是对象,它也可以正常工作。我不知道那里发生了什么。

4

0 回答 0