Повышение простого типа до сущности является одним из вариантов.Если вы хотите использовать эту новую сущность примитивного типа в большем количестве отношений, лучше полностью удалить свойства навигации из этой сущности и использовать независимую ассоциацию (без свойств FK).
public class StringEntity
{
public int Id { get; set; }
public string Text { get; set; }
}
и отображение:
modelBuilder.Entity<Foo1>().HasMany(f => f.Strings).WithOptional();
modelBuilder.Entity<Foo2>().HasMany(f => f.Strings).WithOptional();
В базе данных вы получите новый обнуляемый FK для каждого связанного участника - избежать этого невозможно, кроме как создать специальный класс StringEntity
для участника (не используйте для этого наследование, поскольку это влияет на производительность).
Существует альтернатива:
public class StringEntity
{
public int Id { get; set; }
public List<string> Strings { get; private set; }
public string Text
{
get
{
return String.Join(";", Strings);
}
set
{
Strings = value.Split(";").ToList();
}
}
}
В этом случае вам не нужен связанный тип сущности (и дополнительная таблица), но ваша сущность загрязнена дополнительным свойством Text
, которое предназначено только для персистентности.