1

Linq to Sql を使用すると、「値 NULL を列 'ID' に挿入できません」という例外が発生し、ID プロパティを空白のままにしていますが、DBML ファイルで ID を自動生成するように設定しています。これは、ID なしで挿入し、linq を使用せずに SQL を自動生成する場合に正常に機能します。問題は、LINQ が単に SQL を通過させたとしても、ID が空であることを認識しているため、LINQ が例外をスローしていることです。

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
    public int ID
    {
        get
        {
            return this._ID;
        }
        set
        {
            if ((this._ID != value))
            {
                this.OnIDChanging(value);
                this.SendPropertyChanging();
                this._ID = value;
                this.SendPropertyChanged("ID");
                this.OnIDChanged();
            }
        }
    }
4

2 に答える 2

3

列定義に「IDENTITY」を含める必要があります。

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int ID
{ ... }

それでも修正されない場合は、追加UpdateCheck=UpdateCheck.Neverしてみてください。

于 2013-03-10T20:26:21.873 に答える
0

マッピング構成でキーが欠落していることが原因で、同様の問題が発生しました(本来あるべき複合キーではなく、キーが1つしかありませんでした)。

私の問題は似ていたので、答えを共有したいと思いましたが、私の解決策は少し異なります。

要するに、私のコンテキスト クラスと構成は次のようになります。

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Loads the configuration:
        modelBuilder.Configurations.Add(new MyMyDataClassConfiguration()); 
    }

    // ...
}


public class MyDataClassConfiguration : EntityTypeConfiguration<MyDataClass>
{
    public MyDataClassConfiguration()
    {
        ToTable("MyDataTableName"); // Maps to table

        // Specify composite key (I was missing a key here)
        HasKey(data => new {data.First_Key_Name, data.Second_Key_Name });
    }
}
于 2013-10-16T08:00:50.313 に答える