Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架和标识插入_Entity Framework_Frameworks_Insert_Entity - Fatal编程技术网

Entity framework 实体框架和标识插入

Entity framework 实体框架和标识插入,entity-framework,frameworks,insert,entity,Entity Framework,Frameworks,Insert,Entity,我正在编写一个应用程序,用于导出数据并将其序列化到文件以归档旧数据 在某些情况下,出于某种原因,可能需要重新导入select数据。这给我带来了一个问题,因为有一个标识列 为了解决这个问题,我在事务范围内执行工作。为该表设置标识插入,然后更新我的事务,例如 using (TR.TransactionScope scope = new TR.TransactionScope(TR.TransactionScopeOption.RequiresNew)) {

我正在编写一个应用程序,用于导出数据并将其序列化到文件以归档旧数据

在某些情况下,出于某种原因,可能需要重新导入select数据。这给我带来了一个问题,因为有一个标识列

为了解决这个问题,我在事务范围内执行工作。为该表设置标识插入,然后更新我的事务,例如

using (TR.TransactionScope scope = new TR.TransactionScope(TR.TransactionScopeOption.RequiresNew))
                {
                    // allow transaction nbr to be inserted instead of auto generated                        
                    int i = context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.Transactions ON");

                    try
                    {
                        // check if it already exists before restoring
                        var matches = context.Transactions.Where(tr => tr.transaction_nbr == t.transaction_nbr);

                        if (matches.Count() == 0)
                        {
                            Transaction original = t;                                
                            context.Transactions.AddObject(original);
                            context.SaveChanges();
                            restoreCount++;
但我收到一个例外,说:

当identity_INSERT>设置为ON或复制用户正在插入NOT for replication identity>列时,必须为表中的identity列指定显式值

我假设实体框架试图在不指定列的情况下执行某种块插入。在实体框架中是否有这样做的方法

这个对象很大,有很多关联的实体,这些实体也被反序列化,需要插入,所以如果可能的话,我想让实体框架来做这件事,因为这样可以节省我很多额外的工作


感谢您的帮助。

格特·阿诺德-这就是我问题的答案。多谢各位

我确实在别处读到过,并在对象浏览器中设置了值,所以我认为这就足够了。我还通过右键单击.edmx并打开来双击该值,以便在XML编辑器中查看详细信息,如另一篇文章中所建议的

当我在XML编辑器中检查值时,最初它也是“无”,所以假设这不是我的问题。但我想只要进去存点钱,第一次就解决了这个问题

第二次,在我必须从数据库中更新模型之后,我不得不根据你的建议重复这一步。但是第二次使用StoreGeneratorPattern时,它与对象浏览器中设置的模式不同,因此我需要在XML中手动更改它

在我的情况下,这很好,因为通常情况下,记录是通过另一种机制插入的,因此身份对我来说只是一种阻碍,因为身份将始终作为一个旧的(过去存在的)身份值插入,该值正在临时恢复


谢谢你的帮助。

我不知道我做了什么,但它似乎已经自我纠正了。要么我以某种方式调整了模型使其成为可能,要么可能存在一些范围问题,这意味着它无法重新导入,因为以前的exportNah,它又回来了。我到底在干什么?EF模型中标识列的
StoreGeneratedPattern
identity
,因此EF不在insert语句中包含它。我认为您应该使用带有
StoreGeneratedPattern的阴影模型。在所有涉及的标识列上都没有。或者找到一种在运行时调整模型的方法,有点像。或者如果您首先使用代码,则添加[DatabaseGenerated(DatabaseGeneratedOption.None)]作为主键属性的属性。