[英]Linq's InsertOnSubmit not added to changeset
有关如何调试linq到SQL的InsertOnSubmit语句?
我执行以下代码:
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();
UPDATE
这是主键的属性:
[Column(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
public System.Guid Id
我注意到Auto-sync属性在属性窗口中的值为“Never”。 我的猜测是需要OnInsert。 要检查一下。
在我调用submitchanges之前,我检查更改集,它显示没有插入,更新或删除... SQL profiler显示我没有发送查询,附加db.Log显示我没有执行任何操作。
为什么没有提交任何内容?
L2S模型中没有定义主键? 检查以便至少有一列将“主键”属性设置为true。
ObjectTracking
可能被禁用吗?
我建议您为主键和版本跟踪字段发布自动生成的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
我从代码中看不出任何可以向我表明问题的东西。 此时,我将一个新的DBUser对象拖放到您的DBML文件中(将其重命名为DBUser2),执行此代码并观察它是否正常工作。 有了工作代码,我会检查两个实体之间的差异。 这将是不明显的事情。 此外,单击DBML文件上的“运行自定义工具”并查看“错误/警告”窗口以获取任何警告 - SqlMetal可能只是以警告的形式告诉您出错了什么。
如果由数据库生成的的Guid ID列,那么这是Linq中的一个bug to SQL中,作为记录在这里 ,因为你的属性名称是比你的列名不同。
从您的示例中,您似乎在应用程序中分配它,因此它可能不适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.