2010-08-06 25 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内部完成使用。

相关问题