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