C# 林克';s InsertOnSubmit未添加到变更集

C# 林克';s InsertOnSubmit未添加到变更集,c#,.net,linq-to-sql,C#,.net,Linq To Sql,有关 我执行以下代码位: db.DBUsers.InsertOnSubmit(new DBUser { Id = id, BrandCode3 = brandCode3.ToLower(), LoweredUsername = username.ToLower(), Username = username, CreationDate = date, Salt = salt, P

有关

我执行以下代码位:

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显示未执行任何操作。

为什么没有提交任何内容?

L2S模型中没有定义主键?选中此复选框,以便至少有一列的“主键”属性设置为true。

是否禁用了对象跟踪?

我建议您为主键和版本跟踪字段发布自动生成的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 To Sql中的一个错误,如文档所述,因为属性名与列名不同


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

检查ID值是否为主键,而不是标识。当然,我从dbml中删除了它并再次添加了它。否更改是的,已启用。只是为了确保我添加了一行来设置它为真。没有改变。你的电脑发生了一些奇怪的事情:),试着用一个简单的表创建一个新的数据库,看看行为是否保持不变。我在4个数据库(两台服务器)上测试了它,得到了相同的行为:sresorder to oldskool SqlCommands now。现在很难让我的同事支持Linq:请粘贴CREATE TABLE命令和.dbml文件中的表格XML项。sqlmetal在哪里显示任何反馈?没有弹出控制台窗口,错误列表中也没有出现任何行。请检查输出窗口。您的“警告”窗口也将出现sqlmetal错误。我在OP中添加了一个反应。请看一看您是否在代码中实际设置了Guid主代码?我猜想,LINQ在将ID集触发之前,不会考虑可插入的实体。Guid _id;不使用有意义的值初始化guid变量。您需要:entity.Id=Guid.NewGuid();