当IDENTITY_INSERT为OFF

时间:2016-07-06 20:57:25

标签: entity-framework identity-insert

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

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的Idendity列中插入Explict值。

我的2张表是

BRIDownloadType

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而不是对象,它也可以正常工作。我不知道那里有什么。

0 个答案:

没有答案