2011-04-12 105 views
1

我为我的DomainService类写了一个重载。问题是,当我重新编译时,它没有显示为我的DomainContext的重载。怎么了?下面是一个代码示例:为什么DomainService构造函数重载显示为DomainContext构造函数重载?

[EnableClientAccess] 
public class FoodDomainService : LinqToEntitiesDomainService<FoodEntities> 
{ 
    public FoodDomainService(CultureInfo cultureInfo) 
    { 
     Thread.CurrentThread.CurrentCulture = cultureInfo; 
    } 
} 

而且这不起作用:

FoodDomainContext _foodContext = new FoodDomainContext(Thread.CurrentThread.CurrentCulture); 

我得到一个错误,没有超载匹配。我不允许这样做吗?我需要某种属性吗?

回答

0

这将无法正常工作,因为在Silverlight的客户端代码上生成了DomainContext,单击查看所有文件夹或跳转到定义,您将看到生成的代码将不包含您的额外构造函数。

相反,您将不得不在您的域服务中创建一个方法并将信息传递给服务器。

public SetCultreInfo(int lang,...) 
{ 
    .. set culture info 
} 

在您的客户端,里面的构造应该叫,

public MyDomainContext() 
{ 
    this.SetCulture(....); 
} 
1

你不允许这样做。当您从Silverlight客户端新建上下文时,您并不是直接对您的服务进行类型化。而是实例化由RIA Services生成的代理类,然后该代理类将调用您的服务。这就是为什么你看不到你的构造函数:因为RIA没有在你的代理中生成它。

做你想做的事情也会暗示有一个往返于服务器的时间点,这是不会发生的,因为你需要完成初始化该对象才可以这样做。

无论如何,您可以创建一个名为SetCurrentCulture()的方法,然后在之后调用来初始化代理。

+0

我给出的两个建议基本上是一样的。但是,他们都不工作。我在我的DomainContext类中由于某种原因而无法访问我的DomainService类中的公共方法。我看不到任何可查看方法的属性(例如查询方法)。那么我错过了什么?我是否把这个方法放在错误的地方?我把它放在XXXDomainService类中,作为一个公共方法,没有任何属性。 – vbullinger 2011-04-12 15:43:28

+0

您的方法必须将实体作为输入/输出自动可见。尝试添加'[Invoke]'属性,并将文化传递为'string',然后可以用'CultureInfo.CreateSpecificCulture'解析(尽管我认为它应该通过传递一个'CultureInfo'来工作) – 2011-04-12 22:58:22