Asp.net mvc Asp.NETMVC5将rss提要保存到数据库
我正在从另一个网站获取rss提要,如果该网站关闭,我不希望出现错误。所以为了避免出错,我尝试将rss提要保存到数据库中,如果rss服务器关闭,我将能够从数据库中获取提要。 我还想在数据库中只保留6个提要。如果有新的提要,我想通过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
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))