实体框架 - 将列映射到列表

时间:2016-07-22 14:29:30

标签: c# entity-framework entity-framework-6 entity-framework-core

我们接管了一个旧的桌面产品数据库应用程序,用于维护一个简单的在线商店。产品有一些基本信息,如价格,制造商,照片,标题,描述等。标题和描述的产品翻译(以及其他语言特定信息)直接保存在主要产品表中。

Sofar产品数据库表如下所示:

AbProduct
    Id
    Price
    ManufacturerId
    ManufacturerNumber

    ...more columns...

    TitleDe
    DescriptionDe
    TitleFr
    DescriptionFr
    TitleIt
    DescriptionIt

模特:

public class AbProduct
{
    public int Id { get; set; }
    public decimal Price { get; set; }
    public int ManufacturerId { get; set }
    public string ManufacturerNumber { get; set; }

    /*... more properties ...*/

    public string TitleDe { get; set; }
    public string DescriptionDe { get; set; }
    public string TitleFr { get; set; }
    public string DescriptionFr { get; set; }
    public string TitleIt { get; set; }
    public string DescriptionIt { get; set; }
}

Sofar数据库和模型之间的映射是手动完成的。所有CRUD操作都是使用纯ADO.Net

完成的

现在我们正在转向新的在线商店系统,客户希望为新语言添加翻译。在不久的将来会有更多变化和新功能,但目前关注的是新的在线商店以及如何同步数据。

所以我们认为在第一阶段,我们只会重做同步部分,创建一个基于旧模型的新模型,改进它并引入实体框架(6或核心)。数据库暂时保持不变。

我们遇到了映射新模型的问题,无法正确映射翻译列。

我们如何将基于列的翻译(使用Fluent API)映射到基于对象/表格的翻译?

新改进型号:

public class AbProductNew
{
    public int Id { get; set; }
    public decimal Price { get; set; }
    public int ManufacturerId { get; set }
    public string ManufacturerNumber { get; set; }

    /*... more properties ...*/

    public ICollection<AbProductTranslation> Translations { get; set; }
}

public class AbProductTranslation
{
    public int LanguageId { get; set; }
    public int ProductId { get; set; }
    public AbProductNew Product { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

    /*... other language specific properties ... */
}

0 个答案:

没有答案