首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linq To Sql -动态搜索应用层,而不将DAL层公开为DLL

Linq To Sql -动态搜索应用层,而不将DAL层公开为DLL
EN

Stack Overflow用户
提问于 2013-03-30 17:56:24
回答 2查看 413关注 0票数 1

Linq to SQL,C#.

我有三层: DAL,BL,应用程序。我希望在BL中为每个表构建搜索函数,这样这些函数就可以从应用层获得参数“where”表达式。这种方法的优点是每个表都有一个函数,这样客户端就可以以一种自由和动态的方式搜索,给他5种方式(例如);限制他的搜索。

为此,我需要为我的应用程序层提供我的DAL层的DLL。这样做并不是解决问题的好方法(让用户动态地构建自己的搜索,用构建的搜索函数来限制他)。如果应用程序层对我的DAL层有一个动态链接库,则应用程序层可以声明一个ContextObject并为我的数据库做坏事。

我能做些什么来解决这个问题呢?

谢谢你,斯塔夫·阿尔菲。

更新1:

如您所知,为每个表构建一个类。我不想将DAL DLL公开到应用程序层,所以我不能将Linq用于应用程序层中的Sql类。我发现的解决方案是构建与Linq与Sql类相同的类,以便Application层可以使用它们。BL层是用于凸化这些类的resposnibol。由于应用程序层不对Sql的类使用Linq,所以我不能给应用层一个IQueryable ( BL层的任何函数的任何结果都转换为应用层的类)。

更新2:

Linq有LinqClientDB.designer.cs,并构建这些类。

代码语言:javascript
运行
复制
[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="ClientDB")]
public partial class LinqClientDBDataContext : System.Data.Linq.DataContext

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Clients")]
public partial class Client : INotifyPropertyChanging, INotifyPropertyChanged

如果我向应用程序层公开DAL层,则应用程序层可以访问LinqClientDBDataContext类。这不是一个好办法。因此,在BL层中,我将DAL.Client类转换为BL.Client类,但是不能对客户端的表进行动态搜索。我能做什么?

EN

Stack Overflow用户

回答已采纳

发布于 2013-03-30 18:08:31

通过BL公开IQueryable<T>并不会暴露DAL。由于您希望将数据库实体封装在应用程序层的单独类中,所以仍然可以这样做,尽管应用程序将在它可以运行的查询类型中受到更大的限制。

代码语言:javascript
运行
复制
// DAL
public class Entity { ... }

// BL
public class EntityInfo : Entity { ... }

...

public IQueryable<EntityInfo> GetEntities()
{
    return from e in dbContext.Entities
           select new EntityInfo
           {
               // populate your application layer object
           }
}

下面是提供相同结果的另一种编码方法

代码语言:javascript
运行
复制
public Expression<Func<Entity, EntityInfo>> materializeEntityInfo =
    e => new EntityInfo { .. };

public IQueryable<EntityInfo> GetEntities()
{
    return dbContext.Entities.Select(materializeEntityInfo);
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15721627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档