1

在我的應用程序(數據庫優先)中,主鍵始終由客戶端創建,而不是由底層數據庫創建。手動設置EntityKey而不訪問數據庫

在Entity Framework v4中,每個Entity都有它的EntityKey屬性,可以手動設置。

但是,我在EF6中找不到它了?

有什麼具體原因爲什麼?

我不想撥打ctx.SaveChanges()只有Entity's鍵集,因爲這意味着調用數據庫。

我也想知道爲什麼ObjectContext.CreateEntityKey不見了?!

回答

0

如果你使用POCO的 - 這裏是一個示例如何可以做到

public class ChronosItem 
{ 
    [Column, Key, Required, MaxLength(26), DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public string Id { get; set; } 
    .... 

如果你不能改變自己的實體

覆蓋了「OnModelCreating」的方法對你的背景..像這樣..

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<ChronosItem >() 
       .HasKey(p => p.Id) 
       .Property(p => p.Id) 
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

我正在使用'數據庫優先'方法。所以,生成'實體',每次更新數據庫時我都無法更新它們。 – KingKerosin

+0

這就是您的EntitiesContext類生成爲'部分'的原因。因此,當您從數據庫更新模型時,將會有一個地方可以讓您的定製不會被覆蓋。 另一件事 - 如果EF認爲ID是自動生成的 - SQL中的標識規範必須設置爲true(查看SQL中的列屬性) – Marty

+0

在我的情況下 - 如果我從DB生成模型,爲ChronosItem)有StoreGeneratedPattern =無 – Marty