4

我有一個實體類型是這樣的:如何在EF4.3代碼優先的情況下映射到和來自複雜類型?

public class Invoice{ 
    public int Id { get; set; } 
    public InvoiceNumberSequence Sequence { get; set; } 
    public decimal Amount { get; set; } 
} 

InvoiceNumberSequence看起來是這樣的:

public class InvoiceNumberSequence { 
    public string Prefix { get; set; } 
    public int Number { get; set; } 

    public string GetSequence() { 
     return Prefix + Number; 
    } 
} 

我的問題是,我有一個現有的數據庫,我不能改變,我想將表格/列映射到我的域模型。下面是表的外觀:

[SYSTEMINVOICES] 
INVOICE_ID int 
INV_TOTAL decimal 
INVOICE_SEQ varchar(255) 

我有一個DbContext這樣的:

public MyDatabaseContext : DbContext { 
    public DbSet<Invoice> Invoices { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     modelBuilder.Entity<PredictedHeat>().ToTable("SYSTEMINVOICES"); 
     modelBuilder.Entity<Invoice>().HasKey(p => p.Id); 
     modelBuilder.Entity<Invoice>().Property(p => p.Id).HasColumnName("INVOICE_ID"); 
     modelBuilder.Entity<Invoice>().Property(p => p.Amount).HasColumnName("INV_TOTAL");   
     //need something here to map my invoice sequence to my database table 
    } 
} 

我需要映射InvoiceNumberSequence兩個方向的... 1)從數據庫字段的InvoiceNumberSequence類,並2)從InvoiceNumberSequence.GetSequence()方法到數據庫字段。

我該怎麼做?

+0

你想映射來自'GetSequence'與數據庫字段的結果呢?是嗎?我想你想將結果存儲在'INVOICE_SEQ'字段中? – Jupaol

+0

這是它的1/2。我也需要從數據庫字段映射到我的對象模型。 –

回答

6

所以不是GetSequence使用屬性:

public class InvoiceNumberSequence { 
    public string Prefix { get; set; } 
    public int Number { get; set; } 

    public string Sequence { 
     get { retrun Prefix + Number; } 
     set { // Add your parsing logic } 
    } 
} 

而在映射添加:

modelBuilder.ComplexType<InvoiceNumberSequence>() 
      .Property(p => p.Sequence) 
      .HasColumnName("INVOICE_SEQ"); 
modelBuilder.ComplexType<InvoiceNumberSequence>() 
      .Ignore(p => p.Prefix); 
modelBuilder.ComplexType<InvoiceNumberSequence>() 
      .Ignore(p => p.Number); 
相關問題