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 の ID 列に明示的な値を挿入することはできません。

私の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; }

}

ブリトド

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