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

4

1 に答える 1

4

私の最初の質問は、それがDBにヒットしているかどうかです.

この目的のために、 SQL Server プロファイラー(または独立ベンダーのその他のカスタム プロファイラー) を使用できます。実行中のすべての接続とクエリが表示されます。また、コンテキストから読み取って、データベースにアクセスしたかどうかを確認することもお勧めします。

だから私の質問は、この時点でどのようにデバッグするのですか?

ステップ イン フレームワーク ソースデバッグ機能を使用しようとしましたか?

また、最後の手段としてソース コードを用意することもできます (ソース コードをビルドし、生成されたバイナリに対してアプリをデバッグできます)。

于 2013-03-18T09:21:02.430 に答える