与How to debug a linq to sql InsertOnSubmit statement?
相关I执行以下代码:
db.DBUsers.InsertOnSubmit(new DBUser
{
Id = id,
BrandCode3 = brandCode3.ToLower(),
LoweredUsername = username.ToLower(),
Username = username,
CreationDate = date,
Salt = salt,
Password = SecurityService.CreateMD5Hash(salt + password),
PasswordQuestion = passwordQuestion,
PasswordAnswer = passwordAnswer,
Comment = comment,
Email = email,
IsApproved = isApproved,
LastPasswordChangedDate = date,
FailedPasswordAnswerAttemptCount = 0,
FailedPasswordAnswerAttemptWindowStart = date,
IsLockedOut = false,
IsOnLine = false,
LastActivityDate = date
}
);
db.SubmitChanges();
更新
这是主键的属性:
[Column(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
public System.Guid Id
我注意到自动同步属性在属性窗口中的值为“从不”。 我的猜测是需要OnInsert。要检查一下。
在我调用submitchanges之前,我检查更改集,它显示没有插入,更新或删除... SQL分析器显示我没有发送任何查询,附加db.Log显示我没有执行任何操作 为什么没有提交任何内容?
答案 0 :(得分:0)
L2S模型中没有定义主键吗?检查以便至少有一列将“主键”属性设置为true。
答案 1 :(得分:0)
ObjectTracking
可能会被禁用吗?
答案 2 :(得分:0)
我建议您为主键和版本跟踪字段发布自动生成的Linq注释,然后我们可以提供帮助。以下是我的工作实体模型的示例。
[Column(Storage="_Id", AutoSync=AutoSync.OnInsert,
DbType="Int NOT NULL IDENTITY",
IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
时间戳列:
[Column(Storage="_Ts", AutoSync=AutoSync.Always, DbType="rowversion NOT NULL",
CanBeNull=false, IsDbGenerated=true, IsVersion=true,
UpdateCheck=UpdateCheck.Never)]
public System.Data.Linq.Binary Ts
答案 3 :(得分:0)
我从代码中看不出任何可能表明我有问题的东西。此时,我将一个新的DBUser对象拖放到您的DBML文件中(将其重命名为DBUser2),执行此代码并观察它是否正常工作。有了工作代码,我会检查两个实体之间的差异。这将是不明显的事情。此外,单击DBML文件上的“运行自定义工具”并查看“错误/警告”窗口以获取任何警告 - SqlMetal可能会以警告的形式告诉您哪里出错。
答案 4 :(得分:0)
如果您的Guid Id列是由数据库生成的,则这是Linq To Sql中的错误,如文档here所示,因为您的属性名称与列名称不同。
在您的示例中,您似乎在应用程序中分配它,因此可能不适用。