Silverlight应用程序 - 域服务包装器(WCF RIA)

时间:2011-03-24 16:49:13

标签: silverlight wcf-ria-services domainservices

我有一个Silverlight应用程序,我希望能够从数据库中获取数据(客户,订单等)。

现在我已经设法在服务器应用程序中创建了一个WCF RIA服务,我可以在客户端应用程序中调用它并获取所需的数据。问题是,据我所知,域服务调用是异步的,因此我必须创建一个回调,就像这样(所以,这部分代码工作正常)

private void CountriesCallback(LoadOperation<Country> e)
{
    List<Country> countries = e.Entities.ToList();
    // add the list as a data source
}

private void ShowAllCountriesButton_Click(object sender, RoutedEventArgs e)
{
MyDomainContext context = new MyDomainContext();
Action<LoadOperation<Country>> callbackCountries = new Action<LoadOperation<Country>>(CountriesCallback);
context.Load(context.GetCountriesQuery(), callbackCountries, null);
}

所以这样我在Silverlight代码隐藏类中有一个混乱的代码,带有回调和异步方法。这就是为什么我想创建一些包装类 - 有一些静态方法可以只返回我需要的数据,如下所示:

public class CountriesBL
    {
        public static int Add(string countryName, string countryCode)
        {
            MyDomainContext context = new MyDomainContext();
            Country c = new Country() { Name = countryName, Code = countryCode };
            context.Countries.Add(c);
            SubmitOperation submitOp = context.SubmitChanges();
            // always returns 0 !!!
            return c.CountryId;
        }

        private static void RemoveCountryCallback(LoadOperation<Country> e)
        {
            Country c = e.Entities.FirstOrDefault();
            if (c != null)
            {
                Remove(c);
            }
        }

        public static void Remove(int countryID)
        {
            MyDomainContext context = new MyDomainContext();

            EntityQuery<Country> query =
            from c in context.GetCountriesQuery()
            where c.CountryId == countryID
            select c;

            Action<LoadOperation<Country>> callbackCountries = new Action<LoadOperation<Country>>(RemoveCountryCallback);
            context.Load(query, callbackCountries, null);
        }

        public static void Remove(Country country)
        {
            MyDomainContext context = new MyDomainContext();
            context.Countries.Remove(country);
            context.SubmitChanges();
        }

        public List<Country> GetAll()
        {
            //how can I return the collection knowing that the call is Async??
        }
    }

但正如您所看到的,我无法返回插入国家/地区的ID,也无法使用此方法返回国家/地区列表。您对如何创建包装类有任何其他想法或建议吗?在用户界面中使用大量应用程序逻辑甚至数据访问元素会非常奇怪。

由于

0 个答案:

没有答案
相关问题