【问题标题】:How do I map to and from a complex type in EF4.3 code-first?如何在 EF4.3 代码优先中映射到和映射到复杂类型?
【发布时间】:2012-06-05 20:17:59
【问题描述】:

我有一个这样的实体类型:

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() 方法到数据库字段。

我该怎么做?

【问题讨论】:

  • 您想将GetSequence 的结果映射到数据库字段吗?是吗?我猜你想将结果存储在INVOICE_SEQ 字段中,对吧?
  • 这是其中的 1/2。我还需要从数据库字段映射到我的对象模型。

标签: c# oracle entity-framework entity-framework-4.1 ef-code-first


【解决方案1】:

所以不要使用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);

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多