Sam*_*Axe 1 vb.net asp.net-mvc entity-framework entity-framework-5
我收到错误:
{"ReferentialConstraint中的依赖属性映射到存储生成的列.列:'FeeID'."}
设置:我手动创建了数据库(SQL Server 2012和SSMS)
我没有edmx文件
我有两个类,FeeMetaData并且Fee,其映射到两个表中的数据库(PFD.FeeMetaData和PFD.Fees)
FeeMetadata
------------
FeeID BIGINT IDENTITY(1,1) PRIMARY KEY
Something VARCHAR(25) NOT NULL
Fees
------------
FeeID BIGINT PRIMARY KEY NOT NULL
FeeBatchID BIGINT NOT NULL
PersonID BIGINT
Amount DECIMAL(18,2) NOT NULL
DueDate DATE NOT NULL
Run Code Online (Sandbox Code Playgroud)
FeeMetadata.FeeID和Fees.FeeID之间存在一对一的关系
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema
Namespace PFD
<Table("FeeMetadata", Schema:="PFD")>
Public Class FeeMetadata
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal tFee As SOACourt_v1)
Me.New()
Me.PfdFee = New PFD.Fee(tFee)
End Sub
<Key>
<DatabaseGenerated(DatabaseGeneratedOption.Identity)>
Public Property FeeID As Int64
Public Property Something As String
<ForeignKey("FeeID")>
Public Property PfdFee As PFD.Fee
End Class
End Namespace
Namespace PFD
<Table("Fees", Schema:="PFD")>
Public Class Fee
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal tFee As SOACourt_v1)
Me.New()
Me.Amount = tFee.Amount
Me.DueDate = tFee.DueDate
End Sub
<DatabaseGenerated(DatabaseGeneratedOption.None)>
Public Property FeeID As Int64
Public Property FeeBatchID As Int64 = 0
Public Property PersonID As Int64? = 0
Public Property Amount As Decimal
Public Property DueDate As Date = Date.Today
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
Using tContext As FeesContext = New FeesContext
For Each tFee As SOACourt_v1 In tFees
tContext.FeeMetadata.Add(New PFD.FeeMetadata(tFee))
Next
tContext.SaveChanges() ' <---- Error occurs here
End Using
Run Code Online (Sandbox Code Playgroud)
关于导致错误的原因的任何想法:
{"ReferentialConstraint中的依赖属性映射到存储生成的列.列:'FeeID'."}
虽然我还没有使用EF代码优先,但如果在模型图中错误地设置实体关系,这看起来就像是同样的错误.特别是,在我看来,你的外键设置为向后.
该错误是因为您告诉Entity Framework将该FeeId字段用作FeeMetaData和之间的外键Fee,但该字段是在FeeMetaData类中自动生成的.这几乎肯定不是你打算做的.
如果Fee是主表并且FeeMetaData具有外键,那么您应该将标识字段放入Fee.如果表是相反的,那么你的类是向后的,你应该定义Fee为具有作为外键的FeeMetaData属性FeeId.