我已阅读了很多帖子,但找不到我的答案。我的问题有点具体。在我的silverlight项目中,我想从雅虎天气获取天气数据,状态和日期等天气数据并通过更改将其保存到我的数据库中从它的rss.so iused webclient及其DownloadStringAsync和DownloadStringCompleted获取data.also我在我的服务器模型文件夹中创建了一个演示模型(因为我想在我的服务中使用它)所以在我的DownloadStringCompleted事件处理程序中我做了类似的事情这样:
void xmlclient_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)
{
XNamespace yweather = "http://xml.weather.yahoo.com/ns/rss/1.0";
if (e.Error == null)
{
XElement x = XElement.Parse(e.Result);
weatherquery1 =
from items in x.Descendants("item")
select new BusinessApplication1.Web.Models.WeatherConditionModel
{
PubDate = items.Element(yweather +"condition").Attribute("date").Value,
Status = items.Element(yweather + "condition").Attribute("text").Value
};
}
}
这是在我的viewmodel中,我测试了所有的工作。我可以获取数据,也可以在datagrid或listbox中查看结果。 inow我想在我的数据库中保存数据。我希望它是自动完成的,而不是按钮或命令。我希望它总是读取数据,并且每隔5分钟将其保存到数据库中。所以我创建了我的服务我创建了一个自定义插入,我可以自己塑造它:
private void MapwcModel(WeatherConditionTable wctable, WeatherConditionModel wcPM)
{
wctable.Status = wcPM.Status;
wctable.PubDate = wcPM.PubDate;
wctable.WeatherConditionID = wcPM.WeatherConditionID;
}
[Insert]
[Invoke]
public void InsertWeatherConditionData(WeatherConditionModel WeatherConditionData)
{
WeatherConditionTable wc = WeatherConditionContext.WeatherConditionTables.CreateObject();
MapwcModel(wc, WeatherConditionData);
wc.Status = WeatherConditionData.Status;
wc.PubDate = WeatherConditionData.PubDate;
WeatherConditionContext.WeatherConditionTables.AddObject(wc);
WeatherConditionContext.SaveChanges();
}
我的获取数据:
public IQueryable<WeatherConditionModel> GetWeatherConditionData()
{
return from p in this.WeatherConditionContext.WeatherConditionTables
select new WeatherConditionModel
{
WeatherConditionID = p.WeatherConditionID,
Status = p.Status,
PubDate = p.PubDate,
};
}
现在我不知道如何强制它保存data.i在我的iewmodel中写了这个但是没有用:
foreach (BusinessApplication1.Web.Models.WeatherConditionModel el in weatherquery1)
{
WeatherConditionDomainContext context = new WeatherConditionDomainContext();
EntityQuery<BusinessApplication1.Web.Models.WeatherConditionModel> weatherLoadQuery = context.GetWeatherConditionDataQuery();
context.Load<BusinessApplication1.Web.Models.WeatherConditionModel>(weatherLoadQuery);
context.SubmitChanges(delegate(SubmitOperation operation)
{
if (operation.HasError)
{
operation.MarkErrorAsHandled();
}
}, null);
}
我不知道如何强制插入方法work.someone请告诉我我错在哪里?我知道有一个地方。显示我的方式。 最好的问候
答案 0 :(得分:0)
我很难理解你想要做什么,但你展示的最后一步的模式应该更像:
// Create data context
WeatherConditionDomainContext context = new WeatherConditionDomainContext();
// Load existing entities
EntityQuery<BusinessApplication1.Web.Models.WeatherConditionModel> weatherLoadQuery = context.GetWeatherConditionDataQuery();
context.Load<BusinessApplication1.Web.Models.WeatherConditionModel>(weatherLoadQuery);
// Update or insert new entries
foreach (BusinessApplication1.Web.Models.WeatherConditionModel el in weatherquery1)
{
// Update existing entries
// Or, add new entries if they did not exists
}
// Submit all changes (updates & inserts)
context.SubmitChanges(delegate(SubmitOperation operation)
{
if (operation.HasError)
{
operation.MarkErrorAsHandled();
}
}, null);
答案 1 :(得分:0)
我找到了。非常感谢书:Silverlight 4 Unleased- 第13章 - 来自伟大的人物:Laurent Bugnion。
首先,不需要使用WeatherConditionModel作为演示模型 (当您需要在多个表中保存数据时使用的表示模型ID)。它只是一个用作的类 我的查询输出的持有者。 第二,根本不需要在服务中更改Insert方法(因为这里我只想在一个表中保存数据) 所以,只需在你的实体模型上创建你的服务并构建它。之后以这种方式构建它, 你可以在你的视图模型中调用你的表(我不能,因为我改变了我的服务方法(我更改了WeatherConditionTable) 如你所见,手动到WeatherConditionModel(类!!))。 第三,在我的foreach循环中,我可以将数据保存到我的数据库中。 .i有一个组合框,一个列表框和一个按钮,我选择我的城市 从combobox,和命令按钮,使用命令到我的GetRss,它确实 现在很好的工作。它显示数据并将其保存到数据库。 这是我的视图模型代码(描述部分):
internal void GetRssFeed()
{
Feed selectedFeed = (Feed)FeedModel.FeedList[FeedModel.SelectedIndex];
FeedModel.SelectedFeedName = selectedFeed.FeedName;
WebClient xmlclient = new WebClient();
xmlclient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xmlclient_DownloadStringCompleted);
xmlclient.DownloadStringAsync(new Uri(selectedFeed.FeedUrl));
}
WeatherConditionDomainContext context = new WeatherConditionDomainContext();
WeatherConditionTable wct = new WeatherConditionTable();
void xmlclient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
XNamespace yweather = "http://xml.weather.yahoo.com/ns/rss/1.0";
if (e.Error == null)
{
XElement x = XElement.Parse(e.Result);
weatherquery1 =
from items in x.Descendants("channel")
let item=items.Element("item")
select new WeatherConditionModel
{
Temp = Convert.ToInt32(item.Element(yweather + "condition").Attribute("temp").Value),
PubDate = item.Element(yweather + "condition").Attribute("date").Value,
Status = item.Element(yweather + "condition").Attribute("text").Value,
Humidity=Convert.ToInt32(items.Element(yweather + "atmosphere").Attribute("humidity").Value)
};
foreach (WeatherConditionModel wc in weatherquery1)
{
wct.Temp = wc.Temp;
wct.Status = wc.Status;
wct.PubDate = DateTime.Now.ToShortTimeString();
wct.Humidity = wc.Humidity;
context.WeatherConditionTables.Add(wct);
context.SubmitChanges();
}
}
else
{
MessageBox.Show(e.Error.Message);
}
}
感谢所有人的关注。我希望它能帮助某人。如果有人有更好的想法,请告诉我。 如果对任何人都有帮助,请标记为答案。