我在我的脚本中得到这个错误:
当IDENTITY_INSERT设置为OFF时,不能在表'GameMaster'中插入标识列的显式值。
下面是正在执行的代码:
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
我的数据库中有两个表。Player,它有一个PlayerID和PlayerName列。还有GameMasters,它有GameMasterID, PlayerID和GameMasterName其中PlayerID是来自玩家表的外键。我在每个表上设置了主键身份规范(PlayerID为玩家,GameMasterID为游戏管理员)。是什么导致了这个错误。我搜索了一下,发现了类似的问题,但没有一个是完全相同的事情…
很可能你在GameMaster类中声明了一个整数GameMasterID属性。由于整数属性默认设置为零,当插入发生时,它试图设置所有属性,包括GameMasterID属性。因此,它尝试将标识列设置为零,但失败了。
看起来您的数据访问例程在执行插入时隐式传递非null值(可能是隐式零值的自动支持)。
我唯一一次遇到这个错误是当我试图在数据库表中创建一个新记录并试图设置标识字段时。我想这可能是你得到它的唯一方法。
编辑:几乎可以肯定这是一个自动道具在起作用。
奇怪的是编译器会保护你:-
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);
}