2013-05-16 4 views
1

Редактировать: выглядит так, как это называется «сложным типом» в Entity Framework, и я вижу, как я могу установить имя в столбцах для того, чтобы иметь один сложный тип, содержащийся в класс, но я не знаю, как/если вы можете сделать это с несколькими одинаковыми сложными типами, содержащимися в классе.Реализация «вложенных» свойств в Entity Framework

http://blogs.msdn.com/b/wriju/archive/2010/07/26/ef4-complex-type.aspx

EntityFramework 4.1 Code First incorrectly names complex type column names


Поскольку замок ActiveRecord был sunset, я двигаюсь к Entity Framework 5, однако я не знаю, как выполнить понятие "вложенная свойство", что ActiveRecord было:

http://docs.castleproject.org/Active%20Record.Mappings.ashx#Nested_5

http://docs.castleproject.org/Default.aspx?Page=Nested%20data%20%28NHibernate%20components%29&NS=Active%20Record&AspxAutoDetectCookieSupport=1

Я сделал свой поиск в Интернете, но я не уверен, что «вложенная» является правильной терминологией для этой концепции в EF, если она даже существует. Вот мои таблицы и классы, которые у меня были в Castle ActiveRecord, кто-то может предоставить терминологию EF для этого и как это можно сделать:

Свойство Address на AmaStatementEntity, помеченное <Nested(ColumnPrefix:="FL")))>, сопоставляется с столбцами базы данных FLStreet, FLSuite, FLCity и т.д.

CREATE TABLE [dbo].[AMA](
--other columns not necessary to discussion removed 
    [AMAId] [uniqueidentifier] NOT NULL, 
    [FLStreet] [nvarchar](255) NULL, 
    [FLSuite] [nvarchar](255) NULL, 
    [FLCity] [nvarchar](255) NULL, 
    [FLZipCode] [nvarchar](255) NULL, 
    [FLCountry] [nvarchar](255) NULL, 
    [FLState] [nvarchar](255) NULL, 
    [BAStreet] [nvarchar](255) NULL, 
    [BASuite] [nvarchar](255) NULL, 
    [BACity] [nvarchar](255) NULL, 
    [BAZipCode] [nvarchar](255) NULL, 
    [BACountry] [nvarchar](255) NULL, 
    [BAState] [nvarchar](255) NULL, 
    [PAStreet] [nvarchar](255) NULL, 
    [PASuite] [nvarchar](255) NULL, 
    [PACity] [nvarchar](255) NULL, 
    [PAZipCode] [nvarchar](255) NULL, 
    [PACountry] [nvarchar](255) NULL, 
    [PAState] [nvarchar](255) NULL, 
    [IAStreet] [nvarchar](255) NULL, 
    [IASuite] [nvarchar](255) NULL, 
    [IACity] [nvarchar](255) NULL, 
    [IAZipCode] [nvarchar](255) NULL, 
    [IACountry] [nvarchar](255) NULL, 
    [IAState] [nvarchar](255) NULL, 
    [EAStreet] [nvarchar](255) NULL, 
    [EASuite] [nvarchar](255) NULL, 
    [EACity] [nvarchar](255) NULL, 
    [EAZipCode] [nvarchar](255) NULL, 
    [EACountry] [nvarchar](255) NULL, 
    [EAState] [nvarchar](255) NULL, 
    [PYAStreet] [nvarchar](255) NULL, 
    [PYASuite] [nvarchar](255) NULL, 
    [PYACity] [nvarchar](255) NULL, 
    [PYAZipCode] [nvarchar](255) NULL, 
    [PYACountry] [nvarchar](255) NULL, 
    [PYAState] [nvarchar](255) NULL, 
CONSTRAINT [PK_AMA] PRIMARY KEY CLUSTERED 
(
    [AMAId] ASC 
)) 

Public Class AmaStatementEntity 

     Public Sub New() 
      _amaId = Guid.NewGuid 
     End Sub 
'Other properties not relavent to discussion removed 

     <Nested(ColumnPrefix:="FL")))> 
     Public Property FacilityLocation() As AddressEntity 

     <Nested(ColumnPrefix:="BA"))> 
     Public Property BillingAddress() As AddressEntity 

     <Nested(ColumnPrefix:="PA"))> 
     Public Property PatientAddress() As AddressEntity 

     <Nested(ColumnPrefix:="IA"))> 
     Public Property InsuredAddress() As AddressEntity 

     <Nested(ColumnPrefix:="EA"))> 
     Public Property EmployerAddress() As AddressEntity 

     <Nested(ColumnPrefix:="PYA"))> 
     Public Property PayorAddress() As AddressEntity 

     Public Property AMAId() As Guid 
    End Class 

Public Class AddressEntity 
    Public Property Street() As String 
    Public Property Suite() As String 
    Public Property City() As String 
    Public Property State() As String 
    Public Property ZipCode() As String 
    Public Property Country() As String 
    Public Property AddressId() As Guid 
End Class 
+0

Возможный дубликат [Entity Framework - Reuse Complex Type] (http://stackoverflow.com/questions/9931341/entity-framework-reuse-complex-type) – BlackICE

ответ

1

После того, как я нашел правильную терминологию, я был в состоянии найти ответ:

Entity Framework - Reuse Complex Type

для моего конкретного сценария это то, как вы могли бы сделать это (пример показывает отображение одной из ссылок комплексного типа):

 modelBuilder.ComplexType<AddressEntity>(); 
     modelBuilder.Entity<AmaStatementEntity>().ToTable("vAMA"); 
     modelBuilder.Entity<AmaStatementEntity>().HasKey(a => a.AMAId); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.Street).HasColumnName("FLStreet"); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.Suite).HasColumnName("FLSuite"); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.City).HasColumnName("FLCity"); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.ZipCode).HasColumnName("FLZipCode"); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.Country).HasColumnName("FLCountry"); 
     modelBuilder.Entity<AmaStatementEntity>().Property(a => a.FacilityLocation.State).HasColumnName("FLState"); 

 Смежные вопросы

  • Нет связанных вопросов^_^