错误:此上下文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](IEnumerable1 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();