如何通过WCF使用LinqToSql维护子对象?

Tom*_*son 3 .net wcf data-access-layer linq-to-sql

我目前陷入了这个解决方案的设计.

数据层设计包括以下内容:

  • 食谱(父级高级对象)
    • 语言详细信息(名称,语言描述)(很多)
      • 标题(很多)
      • 步骤(很多)
        • 配料(很多)
        • 数量(很多)
        • 程序(很多)
      • 笔记(很多)

我遇到的挑战是如何创建一个数据访问设计,当从WCF SaveRecipe(配方)方法填充对象时,该设计将添加/删除数据库中的子对象?

这一切都源于管理层要求我们在我们的应用程序中添加通信层,现在我们的UI耦合到我们的业务层,而BL直接耦合到DAL,我们基本上需要在BL和DAL之间注入WCF .

我在这篇帖子中读过,使用L2S对WCF来说不是一个好主意,但由于设计不是新的,我们必须使用这种类型的方法,然后一旦我们可以重构大量的方法就离开它UI工作.

tha*_*awg 5

如果您尝试使用WCF发送内容,我建议您创建要在域中移动的数据模型.据我所知,你不能序列化IQueryable对象,但你可以创建一组Linq填充然后序列化的类.例如:

[DataContract]
public class Recipe {

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Description { get; set; }

    [DataMember]
    public List<Ingredient> Ingredients { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

然后填写

List<Recipe> recipes = (from r in dc.recipe
                           select new Recpie {
                               Name = r.name,
                               Description = r.description,
                               Ingredients = (Linq code to make list of ingredients)
                           }).ToList();
Run Code Online (Sandbox Code Playgroud)

然后用WCF发送列表就变得小菜一碟了.