c# – 与Azure同步时如何不违反此主键?
项目总结
我们正在创建一个“数字”厨房,可以添加冰箱,冰柜等物品.然后,您可以在网络应用程序中查看这些物品,这样您就可以随时随地了解厨房中的杂货. 数据库 总共有三张桌子. 清单 它包含这些列表的ListID和名称,如“Fridge”或“Freezer”.所以,这基本上就是’容器’. 项目 然后有物品持有物品类型,即牛奶,1加仑. listItems中 然后是ListItems(抱歉有点令人困惑的名字),它包含特定的项目.虽然Items只是可以添加的项目表,但ListItems是添加的项目.因此,添加到此表的行自然具有Lists表上的List和Items表上的Item的外键的外键.该表的主键是一个超级键,由几乎所有属性组成. 两个ListItem可以引用相同的Item和相同的List,只要它们具有不同的属性即可.它们可能在不同日期到期或不同的单位大小.唯一能使Item唯一的就是名称,就像你添加了一个’Ham’一样,它永远不会覆盖’Milk’.然后添加另一个“牛奶”将被视为相同的项目 问题 这是一个例子.您想要添加两个单独的项目.第一个是3个火腿,每个200克,于5月28日到期. ListID 1引用名为Fridge的List. 看到问题?外键是相同的. 它在我们的本地数据库上存储得很好,但在与Azure数据库同步时,我们收到以下错误: {"Violation of PRIMARY KEY constraint 'PK__#A4D1762__44A4C03D49E5E4B8'. Cannot insert duplicate key in object 'dbo.@changeTable'. The duplicate key value is (1,1).rn The data for table-valued parameter "@changeTable" doesn't conform to the table type of the parameter. SQL Server error is: 3602,state: 30rnThe statement has been terminated."} 这个糟糕的数据库设计还是Azure问题? 更新1 以下是DDL在本地数据库中的外观: CREATE TABLE [dbo].[ListItems] ( [ListId] INT NOT NULL,[ItemId] INT NOT NULL,[Amount] INT NOT NULL,[Volume] INT NOT NULL,[Unit] NVARCHAR(MAX) NULL,[ShelfLife] DATETIME NOT NULL,CONSTRAINT [pk_ListItems] PRIMARY KEY CLUSTERED ([ShelfLife],[Volume],[Amount],[ItemId],[ListId]),CONSTRAINT [fk_ListItems] FOREIGN KEY ([ListId]) REFERENCES [dbo].[Lists] ([ListId]) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT [fk_ListItems2] FOREIGN KEY ([ItemId]) REFERENCES [dbo].[Items] ([ItemId]) ON DELETE CASCADE ON UPDATE CASCADE ); 和Azure数据库DDL: CREATE TABLE [dbo].[ListItems] ( [ListId] INT NOT NULL,[ItemId] INT NOT NULL,[Amount] INT NOT NULL,[Volume] INT NOT NULL,[Unit] NVARCHAR (MAX) NULL,[ShelfLife] DATETIME NOT NULL,CONSTRAINT [PK_dbo.ListItems] PRIMARY KEY CLUSTERED ([ListId] ASC,[ItemId] ASC,[Amount] ASC,[Volume] ASC,[ShelfLife] ASC),CONSTRAINT [FK_dbo.ListItems_dbo.Items_ItemId] FOREIGN KEY ([ItemId]) REFERENCES [dbo].[Items] ([ItemId]) ON DELETE CASCADE,CONSTRAINT [FK_dbo.ListItems_dbo.Lists_ListId] FOREIGN KEY ([ListId]) REFERENCES [dbo].[Lists] ([ListId]) ON DELETE CASCADE ); PK CONSTRAINT行略有不同,但属性相同.这可能是问题吗? 解决方法
我不认为错误是你认为的错误.如果本地和Azure ListItems上的PK都命名相同的列(无论顺序如何),它们都是相同的.但是,错误消息提到了不同的PK定义(以及不同的表名):
似乎有一个名为“@changetable”的表 – 看起来像是我的商店过程参数 – 用两列主键定义.追踪它,你将解决问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sqlite删除字段办法 near 'drop':syntax error;
- 使用Flash Pro CC 输出动画--html5-canvas
- Flex:TextArea附加图像
- 在objective-C中,Type * var和Type * var之间有什么区别?
- 《Red5 用户参考手册》之二:入门第一章 FAQ
- c# – 实体框架映射以查看读取和CUD表
- uboot 2008.10 No NAND device found!!! 0 MiB 问题的解决!
- Oracle11gR2使用RMAN duplicate复制数据库――active datab
- 在Swift中检查空字符串?
- 【转】flashas3从外部嵌入字体