Ядро EF, массивы дескрипторов
Всем привет. Это моя сущность, которая хранится в базе данных:
public class Rule { [Key] public int ruleId { get; set; } public string name { get; set; } public int[] categoryIds { get; set; } }
У меня есть конвертеры для этого типа:
public class ArrayConverter : ValueConverter<int[], string> { public ArrayConverter() : base(x => string.Join(";", x), x => x.Split(";", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray()) { } } public class ArrayComparer : ValueComparer<int[]> { public ArrayComparer() : base((c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => c.ToArray()) { } }
Конвертеры применяются следующим образом:
modelBuilder.Entity<Rule>(builder => { builder.Property(x => x.categoryIds).HasConversion(new ArrayConverter()); builder.Property(x => x.categoryIds).Metadata.SetValueComparer(new ArrayComparer()); });
Что я уже пробовал:
И это работает нормально, на стороне клиента. Мне нужно как-то использовать это свойство (
int[] categoryIds) на стороне сервера вместо этого. Он хранится в строковом столбце следующим образом: 1;2;3
Каков наилучший способ добиться этого с помощью linq to sql?
Я пробовал эф.Свойство<string>(p, "categoryIds").Содержит("1"), но он терпит неудачу с некоторой ошибкой, что ef.property используется неправильно. Мне нужно запустить его на стороне сервера.
categoryIds не привязаны к объекту Rule, они являются общесистемными сущностями, используемыми всеми другими сущностями, поэтому я не могу этого сделать:
public ICollection<Category> categories {get;set;}потому что категория должна была бы иметь отношение к правилу, а оно не может иметь такого.