2010-08-06 12 views
2

這裏的與實體框架整數主鍵而不是自動INT不會傳遞到數據庫

public class Person { 
    [Key] public int ID {get;set;} 
    public string Name {get;set;} 
} 

var owner = new Person() { ID = 1, Name = "Owner" }; 
db.People.Add(Person); 
db.SaveChanges(); 

SaveChanges方法不添加ID到SQL所以我結束了以下SQL查詢表和代碼

exec sp_executesql N'insert [dbo].[People]([Name]) 
values (@0) 
select [ID] 
from [dbo].[People] 
where @@ROWCOUNT > 0 and [ID] = scope_identity()',N'@0 varchar(50),@0='Owner' 

而不是傳入ID的預期插入語句。

是否有另一個屬性,我需要確保ID作爲查詢的一部分傳遞?

我相信它會被要求,但它是有目的的非自動增量。

回答

0

奇怪的是,對於任何可能遇到此問題的人來說,這都是答案。

modelBuilder.Entity<Person>() 
      .HasKey(p => p.ID) 
      .Property(p => p.ID) 
      .StoreGeneratedPattern = StoreGeneratedPattern.Identity; 

希望這可以幫助別人。

+0

你有沒有發現爲什麼會發生這種情況? – 2013-11-04 15:51:22

2

在EF 5,答案是

this.HasKey(t => t.UserID) 
    .Property(p => p.UserID) 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

DatabaseGeneratedOption.Computed時場計算在SQL Server內部完成使用。