繁体   English   中英

Linq的InsertOnSubmit没有添加到changeset

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM