C# 从客户端访问DomainService中的自定义对象
我正在使用域服务从Silverlight客户端从数据库中获取数据 在DomainService1.cs中,我添加了以下内容:C# 从客户端访问DomainService中的自定义对象,c#,asp.net,silverlight,entity-framework,C#,Asp.net,Silverlight,Entity Framework,我正在使用域服务从Silverlight客户端从数据库中获取数据 在DomainService1.cs中,我添加了以下内容: [EnableClientAccess()] public class Product { public int productID; public string productName; public List<Part> Parts = new List<Part>(); //Part is alread
[EnableClientAccess()]
public class Product
{
public int productID;
public string productName;
public List<Part> Parts = new List<Part>(); //Part is already present in Model designer
}
[EnableClientAccess()]
公共类产品
{
公共int productID;
公共字符串产品名称;
public List Parts=new List();//零件已存在于模型设计器中
}
在DomainService1类中,我添加了一个新方法来检索自定义类对象的集合:
[EnableClientAccess()]
public class DomainService1 : LinqToEntitiesDomainService<HELPERDBNEWEntities1>
{
...
public List<Product> GetProductsList(...)
{
List<Product> resultProducts = new List<Product>();
...
return resultProducts;
}
}
[EnableClientAccess()]
公共类DomainService1:LinqToEntitiesDomainService
{
...
公共列表GetProductsList(…)
{
List resultProducts=新列表();
...
返回结果产品;
}
}
我试图从silverlight客户端访问该方法:
DomainService1 ds1 = new DomainService1();
var allproductList = ds1.GetProductsList(...);
ds1.Load<SLProduct>(allproductList).Completed += new EventHandler(Load_Completed); //Not correct usage
domainservice1ds1=新的DomainService1();
var allproductList=ds1.GetProductsList(…);
ds1.Load(allproductList).Completed+=新事件处理程序(Load\u Completed)//用法不正确
然而,这不是调用新方法的正确方法。我在DomainServices.cs中添加新类产品的原因是为了有一个有效的分组。我无法使用实体框架自动生成的模型类实现同样的效果
如何从客户端调用新方法?我相信这里有一个类似的问题,并给出了答案: 此外,这里还讨论了在域服务中添加自定义方法的总体问题:
虽然我不知道您所说的“调用新方法不是正确的方法”是什么意思,或者如果您遇到任何错误,我想发布一些工作代码可能会有所帮助 我的POCO
public class GraphPointWithMeta
{
[Key]
public Guid PK { get; set; }
public string SeriesName { get; set; }
public string EntityName { get; set; }
public double Amount { get; set; }
public GraphPointWithMeta(string seriesName, string entityName, double amount)
{
PK = Guid.NewGuid();
SeriesName = seriesName;
EntityName = entityName;
Amount = amount;
}
// Default ctor required.
public GraphPointWithMeta()
{
PK = Guid.NewGuid();
}
}
域服务中的方法(EnableClientAccess装饰类)
客户端回调方法
private void CallingActivityCompleted(LoadOperation<GraphPointWithMeta> lo)
{
// lo.Entities is an IEnumerable<GraphPointWithMeta>
}
private void CallingActivityCompleted(加载操作lo)
{
//实体是一个IEnumerable
}
我不确定您的产品类别是否为实际实体。从它的定义方式来看,它似乎不是一个实体。我的答案是假设它不是一个实体。您需要为产品属性应用DataMemberAttribute,而不会加载产品列表-加载用于实体查询(服务端的IQueryable)。您可以这样调用它(客户端):
void GetProductList(操作回调)
{
DomainService ds1=新的DomainService();
ds1.GetProductsList(回调,null);//调用操作调用
}
域服务的(服务器端)方法需要InvokeAttribute,如下所示:
[EnableClientAccess]
public class MyDomainService
{
[Invoke]
public List<Product> GetProductList()
{
var list = new List<Product>();
...
return list;
}
}
[EnableClientAccess]
公共类MyDomainService
{
[调用]
公共列表GetProductList()
{
var list=新列表();
...
退货清单;
}
}
下面是如何定义产品类(如果它不是实体):
公共类产品
{
[数据成员]
公共int productID;
[数据成员]
公共字符串产品名称;
[数据成员]
public List Parts=new List();//您可能会遇到一些问题。
//不确定零件是否需要任何其他属性,
//既然你说这是一个实体,也不确定你
//甚至可以有一个实体列表,或者它需要是一个
//实体集合或它需要的内容。您可以
//必须分别打两个电话-一个是为了得到产品
//然后一个去拿零件。
}
就像我说的,我不确定什么样的产品继承自。。。希望这有帮助。你说的不正确是什么意思,这是唯一的方法。
private void CallingActivityCompleted(LoadOperation<GraphPointWithMeta> lo)
{
// lo.Entities is an IEnumerable<GraphPointWithMeta>
}
void GetProductList( Action<InvokeOperation<List<Product>>> callback)
{
DomainService ds1 = new DomainService();
ds1.GetProductsList(callback, null);//invoke operation call
}
[EnableClientAccess]
public class MyDomainService
{
[Invoke]
public List<Product> GetProductList()
{
var list = new List<Product>();
...
return list;
}
}
public class Product
{
[DataMember]
public int productID;
[DataMember]
public string productName;
[DataMember]
public List<Part> Parts = new List<Part>(); // you might have some trouble here.
//not sure if any other attributes are needed for Parts,
//since you said this is an entity; also not sure if you
//can even have a list of entities or it needs to be an
//entity collection or what it needs to be. You might
//have to make two separate calls - one to get the products
//and then one to get the parts.
}