标签: data-access-layer

多租户隔离数据库的DAL和配置的最佳实践

我的公司拥有十几个网站和独立的数据库(相同的模式).每个客户都有自己的网站(不同的应用程序池)和数据库.

每个网站都有自己的配置,多个连接字符串,但它们都具有相同的配置架构.

cust1.domain.com

cust2.domain.com

cust3.domain.com

我们希望将所有网站合并为一个(单个应用程序池)并保留隔离的数据库,以确保安全性和大量数据.

设计DAL和配置它的最佳实践是什么?如果大量的租户将在同一时间,它的含义是什么?一个应用程序池可以管理这种情况,还是可以以某种方式管理它?

顺便说一下,我们使用asp-membership进行用户身份验证.

在此先感谢,艾迪

c# asp.net iis data-access-layer multi-tenant

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

使用DAL2访问数据:值不能为null.参数名称:con

我正在尝试使用DotNetNuke中的DAL2访问数据.当我使用repository.Get()来获取某个表的所有字段时,我有时会收到此错误:

'价值不能为空.参数名称:con'

public IEnumerable<SitesProvince> GetAll()
{
     using (var ctx = DataContextContent.Instance())
     {
          var rep = ctx.GetRepository<SitesProvince>();
          return rep.Get();
     }
}
Run Code Online (Sandbox Code Playgroud)

模型:

[TableName("Sites_Province")]
[PrimaryKey("Sites_Province_No")]
[Cacheable("Sites_Province", CacheItemPriority.Default, 20)]
[Scope("Sites_Province_No")]
public class SitesProvince
{
    public int Sites_Province_No { get; set; }
    public string BU { get; set; }
    public string Province { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?在某些查询中,它有效,有些则没有,我认为方法之间没有任何区别.

我找到了这个,但我没有合同:http: //clraddins.codeplex.com/discussions/24568

sql data-access-layer dotnetnuke-module dotnetnuke-7

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

通过 ScalikeJDBC 访问 PostgreSQL 数组

我尝试使用 ScalikeJDBC 访问 PostgreSQL 9.4 中的数组。DDL:

create table itab (
        code varchar primary key,
        group_list varchar[]
);
Run Code Online (Sandbox Code Playgroud)

在 Scala 应用程序中定义了一个简单的案例类和加载器。

case class Item(code: String, groupSet: List[String])

trait loader {
  def loadAllItems: List[Item] = {
      insideReadOnly { implicit session =>
                       sql"select CODE, GROUP_LIST from ITAB"
                       .map(e => Item(
                           e.string("code"),
                           e.array("group_list").asInstanceOf[Buffer[String]]
                        )).list.apply()
                     }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行一个应用程序时,我得到运行时异常

java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4Array cannot be cast to scala.collection.mutable.Buffer
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢。霍维曼。

arrays postgresql scala data-access-layer scalikejdbc

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

OR Mappers是否提供异步方法?

是否有.Net O/R(对象/关系)Mappers提供开箱即用的异步方法?

如果可能的话,我不想为异步方法编写锅炉板

我使用CCR框架使用异步方法编译了自己的DAL.CCR基本上要求我不阻止任何等待IO响应的线程.

到目前为止,关于我的解决方案的好处在于它是最低限度的.但随着这个项目在规模和功能方面的增长,我面临着维护原始SQL查询和样板代码的轻微艰巨任务.

但另一方面,如果O/R映射器异步方法真的只是一个混乱的黑客,增加了复杂的奇怪,我不会更好.

请不要关注异步编程的替代方案.

.net asynchronous data-access-layer or-mapper

5
推荐指数
1
解决办法
704
查看次数

SOA架构数据访问

在我的SOA架构中,我有几个WCF服务.
我的所有服务都需要访问数据库.

我应该创建一个专门负责所有数据库访问的WCF服务吗?
或者,如果我的每个服务都有自己的数据库访问权限,这样可以吗?

在一个版本中,我只在一个服务中实例化了一个实体层,而所有其他服务都依赖于此服务.
在另一个实体中,实体层在我的每个服务中都是重复的.

第一个版本的主要缺点是引起耦合.
另一个版本的缺点是层重复,可能是SOA不好的做法?

那么,Stack Overflow的优秀人物是怎么回事?

architecture wcf soa data-access-layer

5
推荐指数
2
解决办法
1407
查看次数

在数据访问层中获取当前用户名的最佳实践是什么?

我们最近将审核添加到了数据库中。一位同事使用触发器将其实现,并要求我在登录网站时调用存储过程。该存储过程将当前用户名和当前oracle会话ID插入表中,以便触发器可以将会话ID映射到用户名。问题是(或曾经)他假设用户的Internet会话已映射到数据库会话。事实并非如此,我们使用连接池,因此oracle会话ID可以映射到许多用户,而不必映射到在该会话上登录的用户。因此,我在数据访问层中创建了一个实用程序方法,该方法在每次插入,更新和删除时都调用他的过程(确保它在同一事务中):

/// <summary>
/// Performs an insert, update or delete against the database
/// </summary>
/// <param name="transaction"></param>
/// <param name="command">The command.</param>
/// <param name="transaction">A transaction, can be null. 
/// No override provided without a transaction, to remind developer to always consider transaction for inserts, updates and deletes</param>
/// <returns>The number of rows affected by the operation</returns>
public static int InsertUpdateDelete(OracleCommand command, OracleTransaction transaction)
{
  if (command == null)
    throw new ArgumentNullException("command", "command is null.");

  OracleConnection connection = null;
  bool …
Run Code Online (Sandbox Code Playgroud)

audit data-access-layer

5
推荐指数
1
解决办法
1612
查看次数

数据访问层中标准ORM的替代方案是什么?

我们都熟悉带有关系数据库的基本ORM:一个对象对应于一行,而该对象中的属性对应于一列,尽管许多ORM都增加了很多麻烦。

我想知道还有什么其他选择(除了对数据的原始访问)。仅适用于关系数据库的替代方案会很好,但是以统一的方式,除了SQL以外,还可以与多种类型的后端配合使用的替代方案(如平面文件,RSS,NoSQL等)会更好。我对想法更感兴趣,而不是特定的植入方法以及它们使用的语言/平台,但请链接到您认为有趣的任何内容。

orm data-access-layer

5
推荐指数
1
解决办法
2921
查看次数

设计策略:跨2个不同的数据库查询和更新数据

我们需要在两个不同的数据库中查询数据(SQL Server中的1个和Oracle中的其他数据库).

以下是需要实施的方案:

  1. 查询:从一个数据库获取数据并匹配其他数据库中的值
  2. 更新:从一个数据库获取数据并更新其他数据库中的对象

我们正在使用的技术:ASP.net,C#

我们考虑过的选项:

  1. 在一个数据库中暂存区域
  2. 链接服务器(由于组织范围的策略,不能采用该方法)
  3. 创建Web服务
  4. 使用DAL中2个来源的数据创建2个不同的DAL并执行列表操作

我想知道处理这种情况的最佳设计策略是什么?如果是,那么该方法的优缺点是什么

c# sql-server oracle data-access-layer

5
推荐指数
1
解决办法
746
查看次数

C#数据层和Dto

我最近加入了一家使用类型化数据集作为'Dto'的公司.我认为它们真的很垃圾,并希望将它改成更现代和用户友好的东西.所以,我正在尝试更新代码,以便数据层更通用,即使用接口等,另一个人不知道Dto是什么,我们对如何完成它有轻微的分歧.

如果不试图让人们思考我的思维方式,我想向你们提供关于Dto可以存在的层次的公正答案.DAL,BL和Presentation或仅在这些图层中设置一个小子集.

此外,是否应该或不应该在DAL中存在IList对象.

谢谢.

c# architecture data-access-layer

5
推荐指数
1
解决办法
3555
查看次数

如何为不同的数据源实现Data Mapper/Repository持久性模式?

我正在从头开始编写一个新的网站项目.该项目在C#中,但我的背景是在PHP中(下面的伪代码有点混合,试图简洁和声明).

问题

我需要从两个地方之一检索配置数据 - 有时从本地数据库,有时从Soap服务.我应该能够从任一源创建同一组Model对象.

数据存储在不同数据源中完全不同的结构中 - 需要从Soap端拼凑出几个不同的Soap响应,而DB结构更接近于我在代码中构建模型对象的方式.

配置由对象树组成:产品包含属性,其中包含选项,这些选项具有应用时间的条件.

目标

我想尽可能地分开关注点(希望能够促进测试/维护/扩展能力):

  • 我的Model对象应该对Data Persistence或检索一无所知
  • 数据持久性对象应尽可能与数据源的确切类型无关
  • 我想尽可能地分开对象创建.

问题

我知道各种各样的设计模式(虽然我不完全确定我完全理解它们).我向程序员提出了一个与此类似的问题,得到了关于Persistence Ignorance(更多信息)和Repository模式的回复,它们似乎都是来自Microsoft世界的概念.

据我所知,"Persistence Ignorance"只是让Model对象对你的数据存储机制一无所知的概念,而Repository模式看起来与Data Mapper模式非常相似,只不过它可能更像是一个外观,隐藏更多实际发生的事情.

所以我的问题是:

在Data Mapper模式中,每个Model对象应该有一个Mapper吗?而不是一个整个配置树?

因此,我应该有一个使用所有Mapper对象的配置树构建对象吗?

class ConfigBuilder() {
    public ConfigBuilder (productMapper, propertyMapper, optionMapper, conditionMapper) {
        // save them into local properties
    }

    public Products() {
       var products = productMapper.FetchAll();

       foreach (var product in products) {
           AddProperties(product);
       }

        return …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller design-patterns data-access-layer datamapper

5
推荐指数
1
解决办法
2885
查看次数