Обработайте файл HTML самим скриптом во время сборки и сбрасывайте все переводимые сообщения в фиктивный исходный файл с синтаксисом, ожидаемым вашим экстрактором строк, возможно, примерно так:
<translate>I am ...</translate>
<translate>Placing an order</translate>
<translate>E-mailing customer service</translate>
Ваша модель предметной области при переводе в таблицы базы данных будет противоречить принципам нормализации базы данных.
Проблема : Столбцы уровней в объекте категории создадут избыточность, и не будет необходимости упоминать изменение в модели, если позже вы выясните, что есть больше уровней для размещения.
Решение : Вот что я предлагаю вам:
Шаг 1. Измените свою сущность и создайте отношения между родителями и детьми следующим образом:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace DomainModel
{
public class Category
{
public Category()
{
Children = new HashSet<Category>();
}
public int Id { get; set; }
[Required]
public string Name { get; set; }
public int? ParentId { get; set; }
public virtual ICollection<Category> Children { get; set; }
public virtual Category Parent { get; set; }
}
}
Родительско-дочерние отношения позволяют вам создавать столько уровней, сколько вам нужно. Если категория не принадлежит уровню (другими словами, это корневая категория), ее родитель будет нулевым.
Шаг 2. В методе OnModelCreating () вашего класса DbContext укажите отношение следующим образом:
modelBuilder.Entity<Category>()
.HasMany(e => e.Children)
.WithOptional(e => e.Parent)
.HasForeignKey(e => e.ParentId);
Конечная таблица в базе данных будет выглядеть так:
Я бы разделил эту таблицу на две таблицы. Один для Cat1 и один для Cat2 с внешним ключом для Cat1. Таким образом, у вас не будет много повторяющихся записей Cat1, и вы можете легко сопоставить Cat2 с правильным Cat1.
Это сделает его «один ко многим» между Cat1 и Cat2.
Я бы не беспокоился о том, какие именно значения Id, поскольку это не имеет значения.
Важнее отображение, а также то, что ваши индексы настроены правильно.
Итак, что-то вроде этого я представляю:
Category 1:
ID CategoryLevel1Name
1 PC
2 Laptop
3 Mac
Category 2:
ID CategoryLevel1Id CategoryLevel2Name
1 1 AllInOne
2 1 Classic PC
3 2 NetBook
4 2 Class Laptop
5 3 MacBook Pro
public class Category1
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string CategoryLevel1Name { get; set; }
public ICollection<Category2> Category2s { get; set; }
}
public class Category2
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int CategoryLevel1Id { get; set; }
public string CategoryLevel2Name { get; set; }
[ForeignKey("CategoryLevel1Id ")]
public Category1 Category1 { get; set; }
}
Отказ от ответственности: код не проверен.