当黑盒DbContext.SaveChanges()没有't时调试它
本文关键字:调试 没有 DbContext 黑盒 SaveChanges | 更新日期: 2023-09-27 18:04:39
我有一个非常简单的示例程序来开始掌握实体框架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
但是它没有,也没有在数据库中存储记录。
所以我的问题是我如何在这一点上调试?我的第一个问题是它是否甚至击中DB,不是因为连接字符串是错误的(在app.config),而是出于其他原因。"无声的失败"真的是英孚教育经历的一部分吗?
我的第一个问题是它是否击中了数据库,
您可以使用SQL Server profiler(或任何来自独立供应商的自定义profiler)来实现此目的。它显示正在执行的所有动态连接和查询。我还建议您尝试从上下文中读取以检查您是否击中了db.
所以我的问题是我如何在这一点上调试?
您是否尝试使用步进框架源代码调试功能?
你也有源代码作为最后的手段(你可以构建它并根据生成的二进制文件调试你的应用程序)。