Вопрос по c#, entity-framework – Как мне сопоставить комплексный тип в коде EF4.3 и обратно?

4

У меня есть такой тип объекта:

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 поле верно? Jupaol
Это 1/2. Мне также нужно сопоставить поле базы данных с моей объектной моделью. Byron Sommardahl

Ваш Ответ

1   ответ
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);

Похожие вопросы