如何映射到和从在EF4.3代码优先的复杂类型? [英] How do I map to and from a complex type in EF4.3 code-first?
本文介绍了如何映射到和从在EF4.3代码优先的复杂类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个实体类型是这样的:
I've got a entity type like this:
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;
}
}
我的问题是,我有一个现有的数据库,我无法改变,我想表/列映射到我的域模型。下面是表的外观:
My problem is that I have an existing database that I cannot change and I'm trying to map tables/columns to my domain model. Here's how the table looks:
[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()方法来对数据库字段
I need to map the InvoiceNumberSequence both directions... 1) from the database field to the InvoiceNumberSequence class, AND 2) from the InvoiceNumberSequence.GetSequence() method to the database field.
我怎样才能做到这一点?
How can I do this?
推荐答案
所以不是某个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);
这篇关于如何映射到和从在EF4.3代码优先的复杂类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文