1

編集:これはEntity Frameworkでは「複合型」と呼ばれているようです。クラスに複雑な型が含まれていると、列に名前を設定する方法がわかりますが、どのように/もしあなたがクラスに含まれる複数の同じ複合型でそれを行うことができます。

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

EntityFramework 4.1 Code First で複合型の列名が誤って命名される


Castle ActiveRecord が廃止されたため、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用語とそれをどのように達成できるかを教えてください:

でマークされた AmaStatementEntity の Address プロパティは<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
4

1 に答える 1

1

正しい用語を見つけたら、答えを見つけることができました。

Entity Framework - 複合型の再利用

私の特定のシナリオでは、これはあなたがそれを行う方法です(例は複雑な型参照の1つのマッピングを示しています):

        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");
于 2013-05-16T13:15:11.513 に答える