错误:此上下文EF中仅支持原始类型或枚举类型

这段代码不断出现此错误。 :

无法创建“Repository.DBModel.Subscriber”类型的常量值。 在此上下文中仅支持原始类型或枚举类型。

我已经改变了几次,但它不断出现这个错误。

using (SubscriberDBHandler db = new SubscriberDBHandler()) { IEnumerable  NewSubscribers = Subscribers .Where(sub => db.Subscriber .Any(aSub => !aSub.Email.Equals(sub.Email))); List updateSubscribers = db.Subscriber .Where(dbSub => Subscribers .Any(lSub => lSub.Email .Equals(dbSub.Email))).ToList(); if(NewSubscribers.Count() >= 1) { db.Subscriber.AddRange(NewSubscribers); } updateSubscribers.ForEach(aSub => aSub.State = Subscribers .FirstOrDefault(sub => sub.Email .Equals(aSub.Email)).State ?? "Error" ); db.SaveChanges(); } 

如果有人能够指出我的错误或想出一个更有效的方法来做到这一点,我将不胜感激。

提前感谢您的时间和帮助。


我知道有一些post有这个错误,但在阅读它们时,我无法弄清楚它们与我的问题有什么关系。 所以如果这是一个常见的错误而其他人提供了解决方案,我很抱歉

对象订阅者是List

我似乎无法找到这条线但是。 堆栈跟踪确实包含此内容。

1 source) at Repository.SubScribRepository.AddOrUpdateSubscribers(List 1 Subscribers)的System.Linq.Enumerable.ToList [TSource](IEnumerable 1 source) at Repository.SubScribRepository.AddOrUpdateSubscribers(List

您可以直接在LINQ语句中使用本地集合Subscribers 。 但是这些对象无法转换为SQL。 只有从原始类型到数据库类型的映射。

我建议你用

 var emails = Subscribers.Select(s => s.Email).ToList(); 

然后在Contains语句中使用这些字符串(即原始值)继续:

 var newSubscribers = db.Subscriber .Where(dbSub => !emails.Contains(dbSub.Email)) .ToList(); var updateSubscribers = db.Subscriber .Where(dbSub => emails.Contains(dbSub.Email)) .ToList();