2013-03-18 61 views
0

我有一個非常簡單的示例程序開始掌握實體框架5的實際情況。我已經閱讀了相當數量的理論,一切看起來不錯,但立即我遇到了保存到數據庫的問題。調試黑盒子DbContext.SaveChanges()時它不

我遇到的問題是DbContext.SaveChanges()既沒有拋出異常(我預期)也沒有保存數據。

繼承人的代碼:

 public class PhysicalAddressType 
     { 
      [Key] 
      public long AddressTypeIndexCode { get; set; } 

      public string TName { get; set; } 

      public long ClientId { get; set; } 

      public Guid UserId { get; set; } 

      public DateTime LastModified { get; set; } 


     } 

     public class TestContext : DbContext 
     { 
      public TestContext() : base("Name=Basd.ContactManagement") { } 

      public DbSet<PhysicalAddressType> Addresses { get; set; } 
     } 

    static void Main(string[] args) 
      { 
       try 
       { 

        using (var ctx = new TestContext()) 
        { 
         var ph = new PhysicalAddressType(); 
         ph.ClientId = 500; 
         ph.UserId = Guid.NewGuid(); 
         ph.TName = "test1"; 
         ph.LastModified = DateTime.Now; 
         ctx.Addresses.Add(ph); 
         ctx.SaveChanges(); 

        } 
       } 
       catch (Exception ex) 
       { 
        System.Diagnostics.Debug.WriteLine(ex.Message); 
} 
     } 

我希望,因爲我沒有在數據庫中提供的映射表的代碼拋出異常。這裏是表的模式:

CREATE TABLE [erp_crm].[PhysicalAddressType](
    [AddressTypeIndexCode] [bigint] IDENTITY(1000,1) NOT NULL, 
    [TName] [nvarchar](50) NOT NULL, 
    [ClientId] [bigint] NULL, 
    [UserId] [uniqueidentifier] NULL, 
    [LastModified] [smalldatetime] NOT NULL, 
CONSTRAINT [PK_PhysicalAddressType] PRIMARY KEY CLUSTERED 
(
    [AddressTypeIndexCode] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

但它並沒有,也沒有將記錄存儲在數據庫中。

所以我的問題是如何調試在這一點上?我的第一個問題是它是否會觸及數據庫,不是因爲連接字符串錯誤(在app.config中),而是因爲其他原因。 「沉默失敗」是EF體驗的真正組成部分嗎?

回答

3

我的第一個問題是無論是連打了DB,

可以使用SQL Server profiler(或獨立的供應商的任何其他自定義分析器)用於這一目的。它顯示正在執行的所有連接和查詢。 我也建議你嘗試從上下文中讀取以檢查你是否打了分貝。

所以我的問題是我該如何調試?

您是否試過使用step-into framework source調試功能?

您也有source code作爲最後的手段(您可以構建它並根據生成的二進制文件調試您的應用程序)。

+0

輝煌。看起來我有一個新的最喜歡的工具。 Sql Profiler列出了一系列查詢,但只是簡單介紹一下,我認爲模式名稱(「dbo」)是問題:插入。不知道爲什麼SaveChanges()不會拋出這種情況,但會「步入框架源代碼」(不知道你可以)並從那裏開始。非常感謝。 – rism 2013-03-18 09:36:35

+0

@rism,很高興它幫助) – Isantipov 2013-03-18 11:05:53