Итак, я частично следовал из SO ответа о том, как сохранить свойство с типом данных массива в Entity Framework.В этом ответе я не следил за тем, чтобы строка InternalData была закрытой, а не общедоступной, поскольку я нахожу ее запахом кода, если она установлена на общедоступную (пока не хватает репутации, чтобы комментировать).
Iтакже удалось сопоставить частную собственность в рамках сущности из этого блога .
Когда я выполняю CR (создание, чтение) из этой сущности, все идет хорошо.Однако, когда в моем запросе LINQ есть предложение where, использующее это свойство с типом данных массива, оно говорит, что "System.NotSupportedException: 'Указанный элемент типа не поддерживается в LINQ to Entities. Только инициализаторы, элементы сущностей и навигация сущностейсвойства поддерживаются. '".
Как обойти это?Вот соответствующие блоки кода:
public class ReminderSettings
{
[Key]
public string UserID { get; set; }
[Column("RemindForPaymentStatus")]
private string _remindForPaymentStatusCSV { get; set; }
private Status[] _remindForPaymentStatus;
[NotMapped]
public Status[] RemindForPaymentStatus
{
get
{
return Array.ConvertAll(_remindForPaymentStatusCSV.Split(','), e => (Status)Enum.Parse(typeof(Status), e));
}
set
{
_remindForPaymentStatus = value;
_remindForPaymentStatusCSV = String.Join(",", _remindForPaymentStatus.Select(x => x.ToString()).ToArray());
}
}
public static readonly Expression<Func<ReminderSettings, string>> RemindForPaymentStatusExpression = p => p._remindForPaymentStatusCSV;
}
public enum Status
{
NotPaid = 0,
PartiallyPaid = 1,
FullyPaid = 2,
Overpaid = 3
}
protected override void OnModelCreating(DbModelBuuilder modelBuilder)
{
modelBuilder.Entity<ReminderSettings>().Property(ReminderSettings.RemindForPaymentStatusExpression);
}
//This query will cause the error
public IEnumerable<ReminderSettings> GetReminderSettingsByPaymentStatus(Status[] statusArray)
{
var query = ApplicationDbContext.ReminderSettings.Where(x => x.RemindForPaymentStatus.Intersect(statusArray).Any());
return query.ToList(); //System.NotSupportedException: 'The specified type member 'RemindForPaymentStatus' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.'
}