Asp.net mvc Asp.NETMVC5将rss提要保存到数据库

Asp.net mvc Asp.NETMVC5将rss提要保存到数据库,asp.net-mvc,rss,asp.net-mvc-5,Asp.net Mvc,Rss,Asp.net Mvc 5,我正在从另一个网站获取rss提要,如果该网站关闭,我不希望出现错误。所以为了避免出错,我尝试将rss提要保存到数据库中,如果rss服务器关闭,我将能够从数据库中获取提要。 我还想在数据库中只保留6个提要。如果有新的提要,我想通过PublishDate public static List<Rss.News> GetRssFeed(ApplicationDbContext db) { try { XDocument

我正在从另一个网站获取rss提要,如果该网站关闭,我不希望出现错误。所以为了避免出错,我尝试将rss提要保存到数据库中,如果rss服务器关闭,我将能够从数据库中获取提要。 我还想在数据库中只保留6个提要。如果有新的提要,我想通过
PublishDate

 public static List<Rss.News> GetRssFeed(ApplicationDbContext db)
      {
         try
         {
           XDocument feedXml = XDocument.Load("http://www.gib.gov.tr/
           rss/haberguncel.php");
           var feeds = from feed in feedXml.Descendants("item")
           select new Rss.News
           {
             Title = feed.Element("title").Value,
             Link = feed.Element("link").Value,
             Description = feed.Element("description").Value,
             PublishDate=feed.Element("pubdate").Value
           };

           int counter = 0;
           var itemE = db.News.FirstOrDefault();
           if (itemE != feeds.First())
           {
             foreach (var itemC in feeds)
           {
             if (!db.News.Contains(itemC))
             {
               db.News.Add(itemC);
               db.SaveChanges();
               counter += 1;
             }
             else
             {
               break;
             }
             if (counter == 6) { break; }
             }
             }
             return feeds.ToList();
             }
             catch (Exception)
             {
                // i will get data from database here.
             }
  }
公共静态列表GetRssFeed(ApplicationDbContext数据库)
{
尝试
{
XDocument feedXml=XDocument.Load(“http://www.gib.gov.tr/
rss/haberguncel.php);
var feed=来自feedXml.subjects(“项”)中的提要
选择newrss.News
{
Title=feed.Element(“Title”).Value,
Link=feed.Element(“Link”).Value,
Description=feed.Element(“Description”).值,
PublishDate=feed.Element(“pubdate”).Value
};
int计数器=0;
var itemE=db.News.FirstOrDefault();
if(itemE!=feeds.First())
{
foreach(提要中的var itemC)
{
如果(!db.News.Contains(itemC))
{
db.News.Add(itemC);
db.SaveChanges();
计数器+=1;
}
其他的
{
打破
}
如果(计数器==6){break;}
}
}
返回feed.ToList();
}
捕获(例外)
{
//我将从这里的数据库中获取数据。
}
}
运行此代码时,我遇到此错误:

无法创建类型为的常量值 “…Models.Rss+News”。只有基元类型或枚举 在此上下文中支持类型


错误是由以下行引起的:

if (!db.News.Contains(itemC))
为了在数据库级别执行这种类型的评估,Entity Framework必须能够将要比较的项(
itemC
)转换为常量值,这是它无法使用这种类型的值的,因此会导致错误。您可以尝试将
db.News
强制转换为列表,首先,该列表会将评估切换到数据库的内存中,即:

var news = db.News.ToList();
if (news.Contains(itemC))
但是,您必须评估这可能会如何影响应用程序的性能。或者,您只需查询您确定为用于查找的“键”的特定值。例如,您可能会说,
Link
只有在它是相同的项目时才会匹配,因此基于此:

if (!db.News.Any(m => m.Link == itemC.Link))