Я пытаюсь перенести систему objectcontext / edmx в dbcontext (EF6) с помощью быстрого сопоставления.У меня есть несколько примеров, подобных следующему.Основная таблица имеет отношение к зависимой таблице, где столбец без PK в зависимой таблице содержит значение столбца PK в основной записи.Само по себе это будет отношение один ко многим, но для столбцов FK зависимой таблицы существует уникальный индекс.При использовании сопоставления EDMX это работает нормально, если вы определяете связь, используя сопоставление, а не ссылочные ограничения.Ниже приведен исполняемый пример - вам не нужна база данных, потому что она не зашла так далеко, в настоящее время:
Imports System.Data.Entity
Imports System.Data.Entity.ModelConfiguration
Module Module1
Sub Main()
Using session As New SaturnEntities
Dim res = session.BookingLegSet.Select(Function(x) New With {x.Prefix, x.ID, x.AddressDetails.Address}).ToList
End Using
End Sub
End Module
Partial Public Class BookingLeg
Public Property Prefix As String
Public Property ID As Integer
Public Property LegIndex As Integer
Public Overridable Property AddressDetails As BookingLegAddress
End Class
Partial Public Class BookingLegAddress
Public Property Prefix As String
Public Property ID As Integer
Public Property Address As String
Public Overridable Property BookingLeg As BookingLeg
Property JobLegPrefix As String
Property JobLegID As Integer?
End Class
Public Class BookingLegConfig
Inherits EntityTypeConfiguration(Of BookingLeg)
Public Sub New()
ToTable("JobLegs", "dbo")
HasKey(Function(x) New With {x.Prefix, x.ID})
HasOptional(Function(x) x.AddressDetails).WithRequired(Function(x) x.BookingLeg).Map(Function(x) x.MapKey("Prefix", "ID"))
End Sub
End Class
Public Class BookingLegAddressConfig
Inherits EntityTypeConfiguration(Of BookingLegAddress)
Public Sub New()
ToTable("JobAddresses", "dbo")
HasKey(Function(x) New With {x.Prefix, x.ID})
HasRequired(Function(x) x.BookingLeg).WithOptional(Function(x) x.AddressDetails).Map(Function(x) x.MapKey("JobLegPrefix", "JobLegID"))
End Sub
End Class
Partial Public Class SaturnEntities
Inherits DbContext
Public Sub New()
MyBase.New("data source=dbSaturn;initial catalog=Saturn;integrated security=True;MultipleActiveResultSets=True;")
End Sub
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
modelBuilder.Configurations.Add(New BookingLegConfig)
modelBuilder.Configurations.Add(New BookingLegAddressConfig)
End Sub
Public Overridable Property BookingLegAddressSet() As DbSet(Of BookingLegAddress)
Public Overridable Property BookingLegSet() As DbSet(Of BookingLeg)
End Class
BookingLeg является основным объектом, а BookingLegAddress является зависимым.JobLegPrefix и JobLegID в зависимом элементе будут иметь нулевое значение или будут содержать значения префикса и идентификатора из записи BookingLeg.Когда вы запускаете это, вы получаете ошибку, что AddressDetails был настроен с конфликтующей информацией о сопоставлении.Я пробовал множество разных способов отобразить это, но нигде не нашел - может кто-нибудь сказать мне, что мне нужно сделать?