ADO.NETentity framework和标识列

entity framework是否知道标识列?

我正在使用SQL Server 2005速成版,并有几个主键是标识列的表。 当我使用这些表来创build一个实体模型,并将该模型与一个实体数据源绑定到一个formview以创build一个新的实体时,我被要求input一个标识列的值。 有没有办法让框架不要求身份列的值?

我知道这个post已经很老了,但是这可能会帮助下一个人通过Googlesearch“Entitiy Framework”和“Identity”。

看起来,entity framework确实尊重服务器生成的主键,如果设置了“标识”属性,情况就会如此。 但是,应用程序端模型仍然需要在CreateYourEntityHere方法中提供主键。 此处指定的密钥在SaveChanges()调用上下文时被丢弃。

这里的页面给出了关于这个的详细信息。

如果您正在使用entity framework5,则可以使用以下属性。

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

您应该设置标识列的标识规范,以便将(是标识)属性设置为true。 你可以在SSMS的餐桌devise师那里做这个。 那么你可能需要更新实体数据模型。

也许这就是说“主键是一个标识列”,或者你错过了这一步。

这是我见过的最好的答案。 您必须手动编辑存储层xml以在UniqueIdentifiertypes的每个主键(其默认值设置为NewID()上设置StoreGeneratedPattern="Identity"

http://web.archive.org/web/20130728225149/http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/

entity framework可以识别并处理标识列。

你的问题可能不是EF本身,而是生成的formview。 尝试从插入表单中删除标识列的input,让我们看看会发生什么。

如果一切都失败之前,你撕掉你的头发 – 尝试删除您的EntityModel并从SQL Server重新导入。 如果您一直在调整密钥和关系,并依靠“从数据库更新模型”function,它仍然是我发现的RC版本中的一个错误 – 新的导入可能会有所帮助。

在C#中,你可以做这样的事情,使其知道:

在你的FooConfiguration.cs : EntityTypeConfiguration<Foo>

 this.Property(x => x.foo).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

然后使用它,只要确保将该项插入到上下文中,并在使用x.foo获取更新的自动递增值之前调用context.SaveChanges() 。 否则x.foo将只是0或null。

由于某种原因,entity framework并不完全理解身份。 正确的解决方法是将该列的设置器设置为私有。 这将使任何生成的用户界面明白,它不应该设置身份值,因为它不可能设置私人领域。

我不相信。 Intellisensing ItemCollection在SaveChanges之后生成ID = 0的单个项目。

  Dim ItemCollection = From d In action.Parameter Select New STOCK_TYPE With { .Code = d.ParamValue.<Code>.Value, .GeneralUseID = d.ParamValue.<GeneralUse>.Value, } GtexCtx.STOCK_TYPE.AddObject( ItemCollection.FirstOrDefault) GtexCtx.SaveChanges() 

不pipe我做什么。 经过8个小时,包括删除我的模型,35次构build和重build,试验和编辑EDMX的XML,现在几乎要删除我的整个SQL Server数据库。 在第36次编译中,这个令人哭笑不得的解决scheme奏效了

  Dim abc = ItemCollection.FirstOrDefault GtexCtx.STOCK_TYPE.AddObject(abc) GtexCtx.SaveChanges() 

abc.ID产量41(我需要的身份)

编辑:这是一个循环的AddObject的思想的简单代码,仍然获得ID

 Dim listOfST As List(Of STOCK_TYPE) = ItemCollection.ToList() For Each q As STOCK_TYPE In listOfST GtexCtx.STOCK_TYPE.AddObject(q) Next GtexCtx.SaveChanges() ...more code for inter-relationship tables 

尝试Intellisence listOfST后SaveChanges,你会发现更新的ID。 也许有更好的方法,但概念在那里

什么对我的工作是将StoreGeneratedPattern设置为无,当它是一个标识列。 现在一切工作一致。 与此相关的主要问题是编辑模型是一个极端的琐事,如果你有很多模型。