ReferentialConstraint中的依赖属性映射到商店生成的列
写入数据库时出现此错误:
ReferentialConstraint中的依赖属性映射到商店生成的列。 专栏:“PaymentId”。
public bool PayForItem(int terminalId, double paymentAmount, eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId) { using (var dbEntities = new DatabaseAccess.Schema.EntityModel()) { int pinnumber = 0; long pinid = 1; //getPinId(terminalId,ref pinnumber) ; var payment = new DatabaseAccess.Schema.Payment(); payment.CategoryId = CategoryId; payment.ItemCategoryId = CategoryItemId; payment.PaymentAmount = (decimal)paymentAmount; payment.TerminalId = terminalId; payment.PinId = pinid; payment.HSBCResponseCode = ""; payment.DateActivated = DateTime.Now; payment.PaymentString = "Payment"; payment.PromotionalOfferId = 1; payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid; //payment.PaymentId = 1; dbEntities.AddToPayments(payment); dbEntities.SaveChanges(); } return true; }
模式是:
是否有可能定义了表格之间的错误列关系? 不同的列和一个被设置为自动数字。
它发生在我身上。
这个错误说你正在使用不支持的关系,或者你的映射有错误。 你的代码很可能是绝对无关的错误。
这个错误意味着你在依赖实体中的外键属性被定义为商店生成的实体之间有一些关系。 商店生成的属性填充到数据库中。 EF不支持商店生成的属性作为外键(以及主键中的计算属性)。
我有同样的问题。 基于这里提供的答案,我能够跟踪并解决这个问题,但是我遇到了一个下面描述的奇怪的问题 – 将来可能会有所帮助。
在我的依赖表上,外键列被设置为StoreGeneratedPattern =“Identity”。 我不得不把它改为“无”。 不幸的是,在devise师内部这样做根本不起作用。
我看着devise器生成的XML(SSDL),这些属性仍然在那里,所以我手动删除它们。 我还必须修复数据库上的列(从CREATE TABLE SQL中删除Identity(1,1))
之后,问题就消失了。
对我来说,这是一个错误地放在桌子上的外键,但即使改变了表来修复它,它仍然没有工作。 您需要更新EDMX文件(并不足以从模型中“刷新”表格,您需要在模型中再次删除并添加表格)。
我有同样的问题,并经过一些在sql server中的表devise挖掘,我发现我错误地设置表的主键也作为外键。
sql server表devisestream程
在这个图像中,你可以看到JobID是表的主键,但也是错误的外键。
重新检查付款与其他表/实体之间的关系。 包括那些不应该包含PaymentId的,因为这是问题最有可能隐藏的地方。
在SQL Server Management Studio中创build外键时,主键是默认的,并且在更改父表时更改此默认值,所以要小心在“表和列”窗口中按正确的顺序更改值。
另外,在解决了问题关系之后,模型上的简单“刷新”很可能无法正确地从模型中删除错误的关系,甚至在“ 修复 ”之后也会得到相同的错误,所以在执行刷新之前,请自行在模型中执行此操作。 (我发现这很困难。)
如果你已经检查了你的关系,并且在那里。
删除edmx中的表,然后从数据库中更新。 这将为您节省手动更新。
除了被接受的答案之外,如果您正在使用EF反向POCO生成器或其他生成POCO的工具,请确保重新生成它们!
在我的情况下,这个问题是由双向1-1关系造成的:
class Foo{ [Key] Id [ForeignKey] BarId ... } class Bar{ [Key] Id [ForeignKey] FooId ... }
我不得不简单地删除两个外键之一(不需要)。
在我的情况下,只是没有在数据库上正确设置权限。 我只读了设置和entity framework给了我一个ReferentialConstraint错误,把我扔了。 增加了额外的写入权限,一切都很好。