Linq的InsertOnSubmit没有添加到changeset

时间:2009-11-02 11:10:30

标签: c# .net linq-to-sql

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显示我没有执行任何操作 为什么没有提交任何内容?

5 个答案:

答案 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所示,因为您的属性名称与列名称不同。

在您的示例中,您似乎在应用程序中分配它,因此可能不适用。