Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
C# 获得';无法在表';中插入标识列的显式值;OrderPromo';当IDENTITY#U INSERT设置为OFF时;在没有身份的桌子上_C#_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 获得';无法在表';中插入标识列的显式值;OrderPromo';当IDENTITY#U INSERT设置为OFF时;在没有身份的桌子上

C# 获得';无法在表';中插入标识列的显式值;OrderPromo';当IDENTITY#U INSERT设置为OFF时;在没有身份的桌子上,c#,sql-server,asp.net-mvc,entity-framework,C#,Sql Server,Asp.net Mvc,Entity Framework,我创建了如下表: USE [OrderMore] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[OrderPromo]( [OrderId] [int] NOT NULL, [PromoId] [int] NOT NULL, [Created] [datetime] NOT NULL, CONSTRAINT [PK_dbo.OrderPromo] PRIMARY KEY C

我创建了如下表:

USE [OrderMore]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[OrderPromo](
    [OrderId] [int] NOT NULL,
    [PromoId] [int] NOT NULL,
    [Created] [datetime] NOT NULL,
 CONSTRAINT [PK_dbo.OrderPromo] PRIMARY KEY CLUSTERED 
(
    [OrderId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[OrderPromo]  WITH CHECK ADD  CONSTRAINT [FK_dbo.OrderPromo_dbo.Order_OrderId] FOREIGN KEY([OrderId])
REFERENCES [dbo].[Order] ([OrderID])
GO
ALTER TABLE [dbo].[OrderPromo] CHECK CONSTRAINT [FK_dbo.OrderPromo_dbo.Order_OrderId]
有趣的实体如下所示:

[Table("OrderPromo")]
public class OrderPromo : EntityBase
{
    /// <summary>
    /// 
    /// </summary>
    [Key, ForeignKey("Order")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int OrderId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public int PromoId { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public virtual Order Order { get; set; }

}

您可以尝试像这样打开IDENTITY_INSERT

SET IDENTITY_INSERT Order ON
--Insert script here
SET IDENTITY_INSERT Order OFF

您将OrderId声明为表OrderPromo中的主键,尽管它似乎是外键。它应该是表顺序的主键

从OrderPromo中删除OrderId上的主键,它应该可以工作


我相信现在的情况是,insert试图将引用订单的值强制放入OrderPromo的OrderId字段中,导致它失败。

这些表上有触发器吗?这两个表上都没有触发器。
Order
?@Christos OrderPromo上的PK是OrderId。我建议找出EF生成的确切sql,以确定到底发生了什么。还必须尝试在SSMS中的
OrderPromo
上运行insert命令?错误表明问题出在OrderPromo上,而不是订单本身。我无法在OrderPromo上设置
IDENTITY\u INSERT
,因为没有
IDENTITY
。为什么/如何改变订单?您能发布订单促销定义吗?如果OrderPromo没有标识,影响它是没有意义的为什么在OrderPromo表中为OrderID聚集了主键?这是与订单表的一对一关系吗?使用OrderId和PromoId组合作为主键怎么样?@TonyDong这就是EF迁移的设置方式。OrderPromo是一对一的Order。能否将OrderPromo ID添加到OrderPromo表中,并将其作为主键,将OrderID作为外键?这会将关系从一更改为一,或从零更改为一对多。此外,EF不能很好地处理没有主键的表。OrderID也是Order表的主键。“我相信现在发生的事情是插入试图将引用订单的值强制输入OrderPromo的OrderId字段中。”。这正是我认为应该发生的事情。你应该重新考虑你的设计。我想象一个订单Id唯一地标识一个订单,而不是一个订单促销。如果您的关系是一对一,那么您最好将字段移动到订单表,不是吗?您可以通过添加自己的PK字段轻松解决EF需要PK的问题,这是推荐的方法。
USE [OrderMore]
GO
/****** Object:  Table [dbo].[Order]    Script Date: 01/05/2017 10:57:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Order](
    [OrderID] [int] IDENTITY(1,1) NOT NULL,
    [OrderFormID] [int] NOT NULL,
    [Notes] [nvarchar](250) NULL,
    [Created] [datetime] NOT NULL,
    [TransactionID] [int] NOT NULL,
    [OrderSequenceContext] [int] NOT NULL DEFAULT ((0)),
 CONSTRAINT [PK_dbo.Order] PRIMARY KEY CLUSTERED 
(
    [OrderID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[Order]  WITH CHECK ADD  CONSTRAINT [FK_dbo.Order_dbo.Transaction_TransactionID] FOREIGN KEY([TransactionID])
REFERENCES [dbo].[Transaction] ([TransactionID])
GO
ALTER TABLE [dbo].[Order] CHECK CONSTRAINT [FK_dbo.Order_dbo.Transaction_TransactionID]
SET IDENTITY_INSERT Order ON
--Insert script here
SET IDENTITY_INSERT Order OFF