конфигурация EF many-to-many с ключом типа string

201
19 февраля 2017, 08:08

Есть два класса с зависимостью many-to-many.

public class EquipmentTemplate 
{
    int Id { get; set; }
    string StringId { get; set; }
    // other properties...
    MaterialTemplate MaterialTemplates { get; set; }
    ICollection<MaterialTemplate> Materials { get; set; }
}
    public class MaterialTemplate 
{
    int Id { get; set; }
    string StringId { get; set; }
    // other properties...
    EquipmentTemplate EquipmentTemplates { get; set; }
    ICollection<EquipmentTemplate> Equipments { get; set; }
}

Нужно сделать чтобы эти классы, в базе данных в производной таблице, ссылались друг на друга не по ID, а по StringId, при том что StringId не является ключом в классе.

Пробовал через FluentApi так:

        modelBuilder.Entity<MaterialTemplate>()
            .HasMany(e => e.Equipments)
            .WithRequired(e => e.MaterialTemplates)
            .HasForeignKey(e => e.StringId)
            .WillCascadeOnDelete(false);
        modelBuilder.Entity<EquipmentTemplate>()
                    .HasMany(e => e.Materials)
                    .WithRequired(e => e.EquipmentTemplates)
                    .HasForeignKey(e => e.StringId)
                    .WillCascadeOnDelete(false);

но ругается что типы ключей не совпадают:

One or more validation errors were detected during model generation: MaterialTemplate_Materials_Source_MaterialTemplate_Equipments_Target: : The types of all properties in the Dependent Role of a referential constraint must be the same as the corresponding property types in the Principal Role. The type of property 'StringId' on entity 'EquipmentTemplate' does not match the type of property 'Id' on entity 'MaterialTemplate' in the referential constraint 'MaterialTemplate_Equipments'.

READ ALSO
Выбор базы данных в C#

Выбор базы данных в C#

Нужна встраиваемая база данных для хранения ~30 миллионов записей с достаточно быстрым поиском по нимКакие существуют и какие можно использовать?

243
Ошибка перевода object to string

Ошибка перевода object to string

При выборке ругается так:

379
Обвертка в теге &lt;a&gt; PHP

Обвертка в теге <a> PHP

есть переменная, которая содержит следтекст:

359
Параллельность PHP

Параллельность PHP

Как реализовать параллельные запросы с помощью pthreads php?

370