标签: data-access-layer

O/R Mappers - 好的或坏的

我现在在使用O/R映射器或只是坚持传统数据访问之间真的很疯狂.出于某种原因,每次我提出O/R地图制作者时,其他开发人员都会畏缩并谈论性能问题或一般情况下它们是如何糟糕的.我在这里错过了什么?我正在研究LINQ to SQL和Microsoft Entity Framework.这些索赔中有任何依据吗?如果我想使用O/R映射器,我必须妥协什么样的事情.谢谢.

orm data-access-layer

7
推荐指数
3
解决办法
1863
查看次数

包装或不包装:在服务外观中包装数据访问

有一段时间了,我和我的团队一直在Web服务外观(使用WCF)中包装数据访问层并从业务逻辑层调用它.同时,我们可以简单地使用存储库模式,其中业务逻辑层通过接口在本地消耗数据访问层,并且在任何时间点,我们都可以切换它以使其命中服务(如果需要).

问题是:什么时候将数据访问层包装在服务外观中,什么时候不是?现在,似乎主要优势是其他应用程序可以使用该服务,但如果它们是用.NET编写的内部应用程序,那么它们只能使用.NET程序集.将DAL包含在我不知道的服务中还有其他优点吗?

.net oop wcf data-access-layer n-tier-architecture

7
推荐指数
1
解决办法
606
查看次数

实体框架从v1转换为v4问题

将我的数据访问层项目从EntityFramework v1转换为v4后,每个实体类都会出现一堆错误:

错误10016:解析项'EntityTypeShape'时出错.异常消息是:'未解析的引用'NS.EntityName1'.'.DataAccessLayer\Model.edmx

错误10016:解析项"AssociationConnector"时出错.异常消息是:'NS.EntityName1'.'.DataAccessLayer\Model.edmx

有谁知道这是什么以及如何解决它?

.net entity-framework data-access-layer

7
推荐指数
2
解决办法
1461
查看次数

BLL和DAL之间的通信

解决方案设置

  • DAL(班级图书馆)
  • BLL(类库)
  • Common(类库(一些常用功能 - 枚举,日志记录,异常......))
  • Application1(Windows应用程序)
  • Application2(Windows应用程序)
  • WebApp(Web应用程序)
  • ...

假设我有一个Customer实体,它是:

  • SQL Server中的一个表
  • DAL中的CustomerDataTable
  • BLL中的客户类
  • 所有应用程序中的BLL.Customer类

BLL和DAL应该用什么类型的对象进行通信 - DataTable或者List<Customer>(例如)?在第一种情况下,BLL逻辑应将Customer对象转换为DataTable并将其发送到DAL.在secod的情况下,DAL层应该知道Customer层,它位于BLL层中.但原始DLL引用DAL而不是相反......

我是否应该将所有类放入单独的程序集中,这是由所有其他类引用的(Common,BusinessObjects,...)?在这种情况下,我可以在所有项目中使用Customer类.

我知道,当我知道只有一个BLL会使用我的DAL时,我是否应该费心去分离DAL和BLL.在这种情况下,我可以将它们合并为一个项目.

PS - 我正在阅读关于DataTables的内容,很多人说我们根本不应该使用它们.有什么更好的选择?也许现在是我学习一些ORM映射工具的时候了:)

.net c# vb.net data-access-layer bll

7
推荐指数
1
解决办法
6363
查看次数

大数据集的自动完成优化

我正在开展一个大型项目,我必须为用户提供有效的方式将数据输入表单.

该表单中的三个字段需要来自公共数据源(SQL表)的子集的值.我使用JQuery和JQuery UI来构建一个自动完成,它发布到一个通用的HttpHandler.

在内部,处理程序使用Linq-to-sql来获取该特定表所需的数据.该表有大约10个不同的列,linq表达式使用SqlMethods.Like()来匹配这10个字段中每个字段的单个搜索词.

问题是该表包含大约20K行.自动完成工作完美无缺,接受大量数据引入删除,在6秒左右(在本地计算机上调试时)显示之前.

JqueryUI自动完成具有0个延迟,对3键进行查询,并且帖子的结果是在Facebook风格的多行可选选项中进行的.(我几乎不得不重写自动完成插件......).

所以问题是数据与速度.有关如何提高速度的任何想法?我只有两个想法是缓存数据(How/Where?); 或使用直接的SQL数据读取器进行数据访问?

任何想法将不胜感激!谢谢,

<bleepzter/>
Run Code Online (Sandbox Code Playgroud)

asp.net jquery-ui data-access-layer linq-to-sql sql-server-2008-r2

7
推荐指数
1
解决办法
5050
查看次数

企业图书馆的利弊

我正在开发一个复杂的业务应用程序,其中将有一个数据访问层.截至目前,我们有两个选择 - 要么创建我们自己的自定义数据访问层,要么使用Microsoft内置库.我正在寻找一些基本的理由来选择其中一种.

任何回复将受到高度赞赏.

c# asp.net enterprise-library data-access-layer

7
推荐指数
2
解决办法
4089
查看次数

如何使用Dapper获取存储过程的返回值?

我在使用sql server 2016 express的asp.net mvc 4项目.net f/w 4.6.1中使用Dapper

<packages>
  <package id="Dapper" version="1.50.2" targetFramework="net461" />
</packages> 
Run Code Online (Sandbox Code Playgroud)

我有一个存储过程从两个表中删除应该是事务性的

ALTER PROCEDURE [dbo].[FeedbackDelete] @FeedbackID UNIQUEIDENTIFIER
AS 
    SET NOCOUNT OFF 
    SET XACT_ABORT ON  

BEGIN TRANSACTION
    DELETE
    FROM dbo.Document
    WHERE FeedbackId = @FeedbackID
    IF(@@ERROR != 0)
        BEGIN
            ROLLBACK TRANSACTION
            RETURN 1
        END

    DELETE
    FROM   [dbo].[Feedback]
    WHERE  [FeedbackID] = @FeedbackID
    IF(@@ERROR != 0 OR @@ROWCOUNT != 1)
        BEGIN
            ROLLBACK TRANSACTION
            RETURN 1
        END

COMMIT TRANSACTION
RETURN 0
Run Code Online (Sandbox Code Playgroud)

我的repo方法使用这样的短小精悍

public Response DeleteFeedback(Guid feedbackId)
        {
            string storedProcName = "FeedbackDelete"; …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net-mvc data-access-layer dapper

7
推荐指数
1
解决办法
1万
查看次数

数据访问层和业务对象

不确定我是否有正确的术语,但我对如何设置我的3层系统有点困惑.

假设我的数据库中有一个用户表.

在我的DAL中,我有一个UserDB类,它将存储过程调用到DB中以插入,更新,删除.我还有一个UserDetails类,在UserDB中用于返回和传入对象.

所以现在我不确定如何在我的业务逻辑层中使用它.我是否需要为用户提供另一个BLL对象类?如果是这样,这不是多余的吗?或者我只是在我的BLL中使用UserDetails类?

data-access-layer

6
推荐指数
1
解决办法
2061
查看次数

长期交易是否可以接受?

我正在考虑以下列方式在2层WPF(或Windows窗体)应用程序中使用事务:

当我们打开新表格来编辑数据,在此交易中透明地编辑和保持更改时,我们可以开始新的交易.然后我们可以单击"确定"按钮并提交事务,或"取消"按钮并回滚它.如果我们想要打开另一个包含此数据的对话框窗口,我们可以使用嵌套事务.

问题是:这种使用交易的方式是否可以接受?我知道有很多不同的方法来实现这样的逻辑,但我想列出这个逻辑的优点和缺点.

database language-agnostic transactions data-access-layer

6
推荐指数
2
解决办法
2057
查看次数

没有web2py的DAL

我正在使用web2py为我的网站供电.我决定将web2py DAL用于在网站后面运行的长期运行程序.该程序似乎没有更新其数据或数据库(有时).

from gluon.sql import *
from gluon.sql import SQLDB

from locdb import * 
# contains
# db = SQLDB("mysql://user/pw@localhost/mydb", pool_size=10)
# db.define_table('orders', Field('status', 'integer'), Field('item', 'string'),
#    migrate='orders.table')
orderid = 20 # there is row with id == 20 in table orders
#when I do 
db(db.orders.id==orderid).update(status=6703)
db.commit()
Run Code Online (Sandbox Code Playgroud)

它不会更新数据库,并且具有此ID的订单上的选择会显示正确的数据.在某些情况下,提交后的"db.rollback()"似乎有所帮助.

至少可以说很奇怪.你见过这个吗?更重要的是你知道解决方案吗?


更新:
更正:有问题的选择是在程序内完成的,而不是在程序之外.

有时,在进行一系列更新时,有些会在外面工作并且可用,而有些则无法使用.此外,一些查询将返回它最初返回的数据,即使数据在自原始查询后数据库中发生了更改.

我很想抛弃这种方法并转向另一种方法,任何建议?

data-access-layer web2py

6
推荐指数
1
解决办法
1207
查看次数