2013-05-16 56 views
1

編輯: 看起來這在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,我移動到實體框架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術語以及如何完成:

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

我的具體情況,這是你會怎麼做(例如顯示COMLEX類型引用的一個映射):

 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");