簡體   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