我正在尝试为其中一个列是另一个表的 FK 的类定义复合 PK。代码编译没有任何错误,但是当我尝试迁移更改时出现以下错误
PM> Update-Database -Force -TargetMigration:0
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
System.InvalidOperationException: The properties expression 'x => new VB$AnonymousType_0`2(RtepNumber = x.RtepNumber, ContractId = x.Contract.ContractId)' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.
The properties expression 'x => new VB$AnonymousType_0`2(RtepNumber = x.RtepNumber, ContractId = x.Contract.ContractId)' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }' VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.
但是,据推测导致异常的那个似乎确实在请求的语法中。
给定以下课程
Public Class ParentClass
Public Property ParentClassId as String
Public Property Title As String
Public Property ChildClasses As ICollection(Of ChildClass)
End Class
Public Class ChildClass
Public Property ParentClass As ParentClass
Public Property ChildClassId As String
Public Property Title As String
End Class
以及以下 Fluent API 代码
Protected Overrides Sub OnModelCreating(ByVal modelBuilder As System.Data.Entity.DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)
modelBuilder.Entity(Of Models.ChildClass).HasRequired(Function(x) x.ParentClass).WithMany(Function(x) x.ChildClasses).Map(Function(x) x.MapKey("ContractId"))
modelBuilder.Entity(Of Models.ChildClass).HasKey(Function(x) New With {x.ParentClass.ParentClassId, x.ChildClassId})
End Sub
等效的 SQL 代码是
CREATE TABLE [dbo].[ParentClass](
[ParentClassId] [nvarchar](10) NOT NULL,
[Title] [nvarchar](25) NOT NULL,
CONSTRAINT [PK_ParentClass] PRIMARY KEY CLUSTERED
(
[ParentClassId] ASC
)
)
GO
CREATE TABLE [dbo].[ChildClass](
[ParentClassId] [nvarchar](10) NOT NULL,
[ChildClassId] [nvarchar](10) NOT NULL,
[Title] [nvarchar](25) NOT NULL,
CONSTRAINT [PK_ChildClass] PRIMARY KEY CLUSTERED
(
[ParentClassId] ASC,
[ChildClassId] ASC
)
)
GO
ALTER TABLE [dbo].[ChildClass] WITH CHECK ADD CONSTRAINT [FK_ChildClass_ParentClass] FOREIGN KEY([ParentClassId])
REFERENCES [dbo].[ParentClass] ([ParentClassId])
GO
ALTER TABLE [dbo].[ChildClass] CHECK CONSTRAINT [FK_ChildClass_ParentClass]
GO
感谢您提供任何帮助。
编辑:
经过更多的研究(即实验),问题似乎源于在 PK 定义中使用导航属性。所以改变代码看起来像
Public Class ChildClass
Public Property ParentClassId As String
Public Property ChildClassId As String
Public Property Title As String
End Class
Protected Overrides Sub OnModelCreating(ByVal modelBuilder As System.Data.Entity.DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)
modelBuilder.Entity(Of Models.ChildClass).HasKey(Function(x) New With {x.ParentClassId, x.ChildClassId})
End Sub
清除异常,但当然,我现在在 ChildClass 中丢失了 ParentClass 导航属性。
还是一头雾水。