5

私のWCFサービスでは、Entity Framework .NET 4.0を使用しています。データベースには次のテーブルがあります。

CREATE TABLE [dbo].[Tracking](
    [TrackingID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,   
    ...
 CONSTRAINT [PK_Tracking] PRIMARY KEY CLUSTERED 
(
    [TrackingID] ASC
)
) ON [DATA]
ALTER TABLE [dbo].[Tracking] ADD  CONSTRAINT [DF_Tracking_TrackingID]  DEFAULT (newid()) FOR [TrackingID]
GO

レコードを挿入すると、エンティティ フレームワークによって TrackingID が "00000000-0000-0000-0000-000000000000" として事前入力されます。フィールド プロパティを Computed および Identity に設定しましたが、そのような幸運はありません。コード スニペットは次のとおりです。

using (var context = new DB.PTLEntities())
{
     var tracking = new DB.Tracking();       
     context.Trackings.AddObject(tracking);
     context.SaveChanges();
     trackingID = tracking.TrackingID;
}
4

3 に答える 3

5

EF は、この列が ID 列であるとは考えていないように見えるため、デフォルト (Guid) に入れます。GUID を ID 列にする詳細については、こちらを参照してください (実際には正確な例を参照してください) http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework -4/

于 2012-06-21T21:41:51.800 に答える
0

私の場合 (EF >= 4.1)、テーブル自体にデフォルトを追加する必要がありました。

ALTER TABLE MyTable ADD  DEFAULT (newid()) FOR [Id]

また、独自のコンテキストを使用している場合は、列が ID 列であることを EF に伝える必要があります。

public class ShedContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DraftFromWebOneOff>()
            .Property(d => d.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        base.OnModelCreating(modelBuilder);
    }
}
于 2013-08-13T03:56:31.733 に答える