1

我有一个非常简单的示例程序来开始掌握 Entity Framework 5 的实际情况。我已经阅读了相当多的理论,一切似乎都很好,但我立即遇到了保存到数据库的问题。

我遇到的问题是 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 体验的真正组成部分吗?

4

1 回答 1

4

我的第一个问题是它是否会影响数据库,

为此,您可以使用SQL Server 探查器(或来自独立供应商的任何其他自定义探查器)。它显示正在执行的所有原生连接和查询。我还建议您尝试从上下文中读取以检查您是否点击了数据库。

所以我的问题是此时我该如何调试?

您是否尝试过使用逐步进入框架源代码调试功能?

您也确实将源代码作为最后的手段(您可以构建它并针对生成的二进制文件调试您的应用程序)。

于 2013-03-18T09:21:02.430 回答