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 で) 間違っているためではなく、他の理由で、DB にヒットしているのかどうかということです。「サイレント フェイル」は EF エクスペリエンスの実際の部分ですか?