ReferentialConstraint中的依赖属性映射到存储生成的列

Wel*_*ing 94 c# sql-server-2008 linq-to-sql entity-framework-4

写入数据库时​​出现此错误:

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;
    }
Run Code Online (Sandbox Code Playgroud)

架构是:

在此输入图像描述

小智 174

您是否可能在表之间定义了错误的列关系?不同的列和一个被设置为自动数字.

它发生在我身上.

  • 我错误地将我的一个外键设为Identity(自动增量).这是我得到的错误. (54认同)
  • 如果EF错误消息刚刚说明问题是什么而不是吐出gobbledy-gook,那不是很酷吗? (15认同)
  • 如果在Quick Watch窗口中检查异常(即`(例如System.Data.Entity.Infrastructure.DbUpdateException).Entries`),您可以看到哪个表包含被引用的主键. (12认同)
  • 卫生署!我将关系的外键部分保留为SQL Server 2008 Management Studio提供的默认值,这是子表的主键字段,而不是我创建的包含外键值的列. (3认同)

Lad*_*nka 46

此错误表示您使用的是不受支持的关系,或者您的映射中存在错误.您的代码很可能与错误完全无关.

该错误意味着您在依赖实体中的外键属性被定义为存储生成的实体之间存在某种关系.存储生成的属性将填充到数据库中.EF不支持将存储生成的属性作为外键(以及主键中的计算属性).

  • 我可以在sql server中添加具有相同信息的行。当您说“存储生成的”时,您可以举个例子吗? (2认同)

sur*_*fen 8

我有同样的问题.基于这里提供的答案,我能够跟踪并解决它,但我有一个奇怪的问题如下所述 - 它可能会对未来的某些人有所帮助.

在我的依赖表上,外键列已设置为StoreGeneratedPattern ="Identity".我不得不把它改成"无".不幸的是,在设计师内部这样做根本不起作用.

我查看了设计器生成的XML(SSDL),这些属性仍然存在,所以我手动删除它们.我还必须修复数据库上的列(从CREATE TABLE SQL中删除Identity(1,1))

在那之后,问题就消失了.


小智 5

我有同样的问题,经过在SQL服务器中的表设计挖掘后,我发现错误地我将表的主键也设置为外键.

sql server表设计流程

在此图像中,您可以看到JobID是表的主键,但也是错误的外键.