Предметы - собственность аккаунта, один и тот же предмет может быть экипирован у нескольких персонажей. Так что
Many-to-Many как раз то, что нужно. Связываешь персонажей и предметы через таблицу character_item, в случае с EF Core 2.0 придётся создать связующую сущность:
class CharacterItem
{
public int CharacterId { get; set; }
public Character Character { get; set; }
public int ItemObjId { get; set; }
public Item Item { get; set; }
}
Code: C#
class Character
{
public ICollection<CharacterItem> CharacterItems { get; set; }
= new HashSet<CharacterItem>();
}
Code: C#
И это, ты пишешь на C#, а выглядит это всё не как C#.
Если для тебя принципиально важно, чтобы колонки таблиц были в snake_case, то незачем в самих сущностях применять такое написание. Проще в контексте задать необходимый стиль.
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Model.GetEntityTypes()
.SelectMany(entity => entity.GetProperties())
.ToList()
.ForEach(prop => prop.Relational().ColumnName = prop.Name.ToSnakeCase());
}
Code: C#
public static string ToSnakeCase(this string value)
{
return Regex.Replace(value,
"(.)(?=[A-Z])",
"$1_",
RegexOptions.Compiled
).ToLower();
}
Code: C#