3

最初にEFコードに問題があります

テーブルに新しいレコードを挿入しようとすると、メッセージが表示されます。

Cannot insert explicit value for identity column in table '' when IDENTITY_INSERT is set to OFF.

エラーが発生する理由はありますか?

私は次のコードを使用しています:

 public void SaveNewResponse()
    {
        using (var context = new Context())
        {
            var newResponse = new Response()
                {
                    lngRequestLineID = 1001233,
                    memXMLResponse = "test Response",
                    fAdhoc = false,
                };
            context.tblResponses.Add(newResponse);
            context.SaveChanges();
        }
    }

そして、これが私のマッピングです

 public class tblResponsMap : EntityTypeConfiguration<tblRespons>
{
    public tblResponsMap()
    {
        // Primary Key
        this.HasKey(t => new { t.lngResponseLineID});

        // Properties
        this.Property(t => t.lngResponseLineID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        this.Property(t => t.lngRequestLineID);

                 // Table & Column Mappings
        this.ToTable("tblResponses");
        this.Property(t => t.lngResponseLineID).HasColumnName("lngResponseLineID");
        this.Property(t => t.lngRequestLineID).HasColumnName("lngRequestLineID");
        this.Property(t => t.fAdhoc).HasColumnName("fAdhoc");
        this.Property(t => t.memXMLResponse).HasColumnName("memXMLResponse");

    }
}
4

3 に答える 3

3

わかりました、私はそれを見つけました。データベースは正しく設定されていますが、マッピングが正しくありません。

public class tblResponsMap : EntityTypeConfiguration<tblRespons>
{
public tblResponsMap()
{
    // Primary Key
    this.HasKey(t => new { t.lngResponseLineID});

    // Properties
    this.Property(t => t.lngResponseLineID)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); <-- here

    this.Property(t => t.lngRequestLineID);

    // Table & Column Mappings
    this.ToTable("tblResponses");
    this.Property(t => t.lngResponseLineID).HasColumnName("lngResponseLineID");
    this.Property(t => t.lngRequestLineID).HasColumnName("lngRequestLineID");
    this.Property(t => t.fAdhoc).HasColumnName("fAdhoc");
    this.Property(t => t.memXMLResponse).HasColumnName("memXMLResponse");
}
}
于 2012-09-20T09:21:35.860 に答える
0

マッピングコードを変更する必要はありません。代わりに、次の行を変更する必要があります。

lngRequestLineID = 1001233

これに:

lngRequestLineID = 0

私の期限切れでは、deIdエンティティのプロパティを[KeyAttribute]で装飾するだけで十分です。

于 2019-10-25T00:18:34.863 に答える
0

現在のコンテキストの外部でフェッチされ、追跡されなくなったエンティティモデルを指すことにより、EFコアエンティティモデルに関係を追加しているときに、このエラーが発生していました。私はこれを行って、最初は私にとって厄介だと感じた余分な読み取り操作を回避していました。

public static void AddMatches(List<Match> matches, Profile p)
{
    using (var db = new DbContext())
    {
        foreach (var match in matches)
        {
            match.Profile = p;
            db.Match.Add(match);
        }
        db.SaveChanges();
    }
}

別の読み取り操作を実行して解決しました。ここでMicrosoftのドキュメントを参照した後、これは特にMVCの世界では比較的正常であると安心しました。修理:

public static void AddMatches(List<Match> matches, Profile p)
{
    using (var db = new DbContext())
    {
        var profile = db.Profile.Find(p.ProfileId);
        foreach (var match in matches)
        {
            match.Profile = profile;
            db.Match.Add(match);
        }
        db.SaveChanges();
    }
}
于 2021-05-12T17:57:08.400 に答える