错误:IDENTITY_INSERT设置为OFF

时间:2011-04-14 16:57:59

标签: sql vb.net linq

我的脚本中出现此错误:

  

当IDENTITY_INSERT设置为OFF时,无法在表'GameMaster'中为identity列插入显式值。

以下是正在执行的代码:

        Dim db = New PlayerTestDataContextDataContext()

    If txtNewGM.Text = "" Then
        lbWarning.Text = "Please enter a name!"
    Else

        Dim GM As New GameMaster With {
            .GameMasterName = txtNewGM.Text}
        db.GameMasters.InsertOnSubmit(GM)
        db.SubmitChanges()

        Me.Close()

    End If

我的数据库中有两个表。播放器,具有PlayerID和PlayerName列。 GameMasters,它有一个GameMasterID,PlayerID和GameMasterName,其中PlayerID是来自播放器表的foriegn键。我有主键Identity SPecification在每个表上设置为yes(玩家的PlayerID和GameMasters的GameMasterID)。是什么导致了这个错误。我四处搜寻,发现了类似的问题,但没有一个是完全一样的......

2 个答案:

答案 0 :(得分:0)

很可能你在GameMaster类上声明了一个整数GameMasterID属性。由于默认情况下整数属性设置为零,因此当插入发生时,它会尝试设置所有属性,包括GameMasterID属性。因此它尝试将标识列设置为零,这将失败。

答案 1 :(得分:0)

看起来您的数据访问例程在执行插入时隐式传递非NULL值(可能是带有隐式零值的auto-prop)。

我遇到错误的唯一一次是当我尝试在数据库表中创建新记录并尝试设置标识字段时。我认为这可能是你获得它的唯一方式。

修改

几乎可以肯定,这里有一个自动道具。

很奇怪编译器会保护您免受: -

    protected void Page_Load(object sender, EventArgs e)
    {
       int beef;
       string aLing = String.Format("{0}", beef);

    }

但不是: -

 public int Beef { get; set; }

 protected void Page_Load(object sender, EventArgs e)
 {
    string aLing = String.Format("{0}", Beef);
 }