问题描述
我收到以下错误:
The setup:I've created the database by hand (SQL Server 2012 and SSMS)
I do NOT have an edmx file
I have two classes, FeeMetaData
and Fee
, which map to two tables in the database (PFD.FeeMetaData
and PFD.Fees
)
Database Structure
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
There is a 1-to-1 relationship between FeeMetadata.FeeID and Fees.FeeID
Class Structure
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
Usage
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
Any Ideas on what is causing the error:
Although I haven't used EF code-first yet, this looks like the same error you get if you set up your entity relationships incorrectly in a model diagram. In particular, it looks to me like you have your foreign key set up backwards.
The error is because you told Entity Framework to use the FeeId
field as the foreign key between FeeMetaData
and Fee
, but that field is auto-generated in the FeeMetaData
class. That's almost certainly not what you intended to do.
If Fee
is the primary table and FeeMetaData
has the foreign key, then you should put the identity field in Fee
. If the tables are the other way around, then your classes are backwards and you should instead define Fee
to have a FeeMetaData
property with FeeId
as the foreign key.
这篇关于在ReferentialConstraint从属属性映射到一个存储生成列。专栏:“FeeID”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!