标签: data-access

Nhibernate:谁负责非Web应用程序中的事务管理

在Web应用程序中,一个工作单元负责事务管理.

但是Windows应用程序怎么样?

据我所知,存储库是我的数据访问层和业务层之间的连接器.它隐藏了我的业务层中的所有数据访问内容.

使用这个事实让我想到将所有事务内容放入存储库.

但我读到在存储库上使用Commit/RollBack方法违反了存储库的意图.

我问自己谁负责非Web应用程序中的事务管理,如何从业务层隐藏事务/ Nhibernate的东西?

c# nhibernate data-access transactions data-access-layer

8
推荐指数
1
解决办法
1529
查看次数

LinqToSQL和Linq一样吗?

我刚刚读到关于Linq to SQL被停用的内容.有一段时间我完全放弃学习Linq.即使在asp.net上,当我上次检查时,他们的数据访问教程也在使用表适配器和bll类.然后是linq教程.现在我已经读过这个并且实体框架是新的方式,这是否意味着我已经阅读了一年半的所有Linq"东西",它有多棒,等等,就是这一切刚走了?似乎没有人能够以正确的方式解决问题,或者至少采用MS产品的标准方法.而且我明白你不能说一种方法适合一切.但是,在这种特殊情况下,我不明白为什么不能解决数据访问问题.

或者,Linq To SQL只是Linq的ORM部分吗?如果我想使用ORM,我现在究竟会学到什么?我已经在StackOverflow上阅读了几个东西,但没有一个真正帮助我知道该怎么做.

似乎nHibernate可能比任何微软的选择更好.是的,我知道还有其他人(亚音速,其他人在各种SO问题中被提及.)

谢谢.

linq nhibernate orm data-access

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

无法构造类型数据库.您必须配置容器以提供此值(EntLib 5 + ODP.NET)

我使用企业库的ODP.NET和4.1版本与2008年相比.一切都很好.

现在,使用ODP.NET Oracle.DataAccess 4.112.2.0和企业库版本5.0.414.0以及2010,.net 4.0进行迁移.

Oracle.DataAccess 4.112.2.0 EnterpriseLibrary 5.0.414.0

在最近从Enterprise 4.1的4.1版升级到5.0之后,一旦我们收到以下错误:

"无法构建类型数据库.您必须配置容器以提供此值."

Microsoft.Practices.ServiceLocation.ActivationException:尝试获取数据库类型的实例时出现激活错误,键"ConnectionStrings.Oracle.xxx"---> Microsoft.Practices.Unity.ResolutionFailedException:依赖项的解析失败,type ="Microsoft .Practices.EnterpriseLibrary.Data.Database",name ="ConnectionStrings.Oracle.xxx".在解决时发生异常:例外情况是:InvalidOperationException - 无法构造数据库类型.您必须配置容器以提供此值.

参考文献EntLib论坛:http://entlib.codeplex.com/discussions/215290

有关它的任何解决方案

我的配置

<configSections>

<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=709072f976b4c05b"/>

<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=709072f976b4c05b" />
</configSections>

<dataConfiguration defaultDatabase="ConnectionStrings.Oracle.xxx"/>

<connectionStrings>

<add name="ConnectionStrings.Oracle.xxx" connectionString="DATA SOURCE=des;PASSWORD=zzz;PERSIST SECURITY INFO=True;USER ID=aaa;"
providerName="Oracle.DataAccess.Client" />
Run Code Online (Sandbox Code Playgroud)

我的守则

 var key = "ConnectionStrings.Oracle.xxx";

            Database db = Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current.GetInstance<Database>(key); //~(EntLib 5 recommended)


            using (DbCommand cm = db.GetStoredProcCommand("TBL_FRKDATA.TBL_FRKDATA_FND_ALL"))
            {
                cm.Parameters.Add(CreateCursorParameter("P_REFCURSOR"));

                // Using "using" will cause both the DataReader and …
Run Code Online (Sandbox Code Playgroud)

database enterprise-library data-access odp.net enterprise-library-5

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

处理spring DataAccessException的位置

我使用Struts,Spring和Hibernate开发了一个应用程序.

我的DAO使用spring jdbc,并且它的所有方法都抛出DataAccessException(未选中).

我应该在哪里处理此例外情况?我知道这是一个未经检查的异常,但我想我需要告诉用户数据库或它的连接是否有问题.

我想我应该从我的服务类方法中重新抛出DataAccessException,以便被Controller捕获.这是一个好习惯吗?

我查看了Spring包中的示例,但未在域或服务区找到任何异常处理.离开dao区域后,似乎忽略了DataAccessException.

请为此事建议一个好的设计.

spring struts dao data-access exception-handling

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

如何在Hibernate中限制数据库级别的用户访问

该应用程序

我需要实现一个将由不同用户使用的Web应用程序.每个用户对各种表具有不同的权限,例如

  • 用户A可以从表中查看字段"名称"和"地址" Student
  • 用户B可以查看字段"名称"和"电话号码",但不能查看表中的"地址" Student
  • 用户C可以查看和修改上述所有字段

  • 我将在UI级别有一些限制某些访问的内容,例如为没有修改条目权限的用户隐藏"编辑"按钮.但是,我认为我应该在较低级别(在数据库级别可能?)有一些东西,以确保数据安全.


    问题

    我正在为我的应用程序使用Hibernate,JBoss,DB2和Struts.我想我应该使用某种类型的JBoss LoginModule,它使用用户/密码/角色对数据库进行身份验证(但我可能错了(?)).我做了一些研究,并提出了以下选项,但似乎没有一个适合我的情况.我认为这是多用户Web应用程序中非常常见的数据访问问题.有人可以指点我正确的方向吗?先感谢您!

    1. hibernate.cfg.xmlJACC事件侦听器中使用'grant'标记.这可以在所有休眠实体上设置"插入""更新""读取"权限.但是,如果我需要更精细的控件怎么办?我需要在某些字段而不是整个对象上设置权限.http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-decl-security.html

    2. 限制每个ejb的getter/setter方法的权限.如果我理解正确,这需要为每个用户配置文件手动配置每个bean,这对我来说似乎不切实际. EJB方法权限

    3. 对DAO进行编码以检查用户权限.滚动我自己的实用程序函数,每次调用特定的DAO方法时都会检查巨型权限表,以确定登录用户是否可以执行操作.

    4. 在Hibernate中使用'拦截器'和'事件'.为每个类定义特定的"onLoad","onSaveorUpdate"等事件和拦截器.在这种情况下,我可以为各个字段指定权限级别吗?http://www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-events.html

    我可能在错误的树上吠叫.所有上述内容似乎都是劳动密集型而且不是很聪明.上述选项都没有为我提供在运行时更改用户权限的编程方法,这在管理员级别用户希望在此应用程序中为其他用户提供更多控制权时非常有用.


    在这里进行数据访问控制的好方法是什么?

    db2 jboss hibernate data-access

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

    如何将DbType.Time的Datareader结果转换为Timespan对象?

    我正在使用带有DAAB 4.0框架的c#从一个MS SQL 2008数据库中读取一个结果,该数据库的列类型为dbtype.time,来自datareader.

    我的问题是MSDN文档说dbtype.time应该映射到一个时间跨度但是我看​​到的唯一接近时间跨度的接近构造函数接受一个long,并且从datareader返回的结果不能转换为long,或者直接转换为时间跨度.

    我发现这篇文章显示了datareader.getTimeSpan()方法,但daab 4.0中的datareader似乎没有这个方法.

    那么如何将结果从datareader转换为timepan对象?

    c# time timespan data-access daab

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

    C#静态数据库类?

    我有一个数据库类,其中包含以下方法:

    • public bool ExecuteUDIQuery(string query)// UDI = Update Delete Insert
    • public bool ExecuteSelectQuery(string query)
    • public bool ExecuteSP(string sp,string [,] parms)
    • public int ExecuteSPReturnValue(string sp,string [,] parms)

    方法的结果存储在私有数据集或数据表中.这些对象被定义为getter.

    大约有10个类使用Database类.每个类都创建一个Database类的对象.现在我正在考虑使Database类保持静态.这是一个好主意吗?如果是这样,为什么?不,为什么不呢?

    c# database static data-access data-access-layer

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

    在学习Linq或实体框架之前,我应该学习"原始"ADO.Net吗?

    当我第一次开始学习如何做经典ASP,VBscript和HTML时,有人告诉我出去购买Dreamweaver因为"它会让生活变得轻松"所以我这样做了,这让我成为了我的第一份专业工作.问题是当HTML,VBScript和经典ASP开始出现问题时,我不知道如何修复它并且在很多深夜工作时试图找出我现在认为简单的问题,但显然对我来说并不简单当时(很多压力).

    话虽如此,我需要开始学习.NET中的数据访问策略,我不想再次讨论它.我应该学习原始ADO.NET("原始",我的意思是不是ORM或Linq,而是DataAdapters和读者),然后是Linq或ORM,还是我可以直接进入Linq/ORM的东西?我不是在寻找任何东西之间的比较,我正在寻找一个对我来说最适合作为开发人员长期的东西.谢谢.

    .net data-access

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

    引用实体框架中的表的模式名称

    你如何明确地告诉EF一个表位于特定模式中?

    例如,AdventureWorks数据库定义了Production.Product表.使用该OnModelCreating方法时,我使用以下代码:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        EntityTypeConfiguration<Product> config = modelBuilder.Entity<Product>();
    
        config.HasKey(p => p.ProductID);
        config.Property(p => p.Price).HasColumnName("ListPrice");
        config.ToTable("Product");
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然而,当它运行时,它说Invalid object name: dbo.Product.

    我试过了:

    config.ToTable("Production.Product");
    //and
    config.HasEntityName("Production");
    
    Run Code Online (Sandbox Code Playgroud)

    但两者都失败了.

    c# data-access entity-framework-4.1

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

    将BLL类标记为静态或?

    我已经有了分层数据访问设计,效果很好.但我不知道它是否是最合适的实现.
    我只是想知道BLL类或methots应该是静态的还是应该是只有一个实例的concreate类?
    与此同时,我不需要序列化BLL类以在这样的SOA设计中使用它.但我不知道这个功能会带来什么.
    请查看以下选项:

    1. BLL课程和methots是静态的
    2. BLL类不是静态的,但它的methots是静态的
    3. BLL类不是静态的,也不是它的methots.应用程序应每次创建BLL类以访问其methots.
    4. BLL类不是静态的,也不是它的methots.但是每个BLL类只有一个实例.应用程序使用这些静态实例以便使用BLL methots.

    哪一个最有效率的表现和设计?

    编辑:

    选项1

    public static class BllCustomer
    {
        public static List<ModelCustomer> GetCustomers()
        {
    
        }
    }
    
    // usage
    BllCustomer.GetCustomers();
    
    Run Code Online (Sandbox Code Playgroud)

    选项2

    public class BllCustomer
    {
        public static List<ModelCustomer> GetCustomers()
        {
    
        }
    }
    
    // usage
    BllCustomer.GetCustomers();
    
    Run Code Online (Sandbox Code Playgroud)

    2选项

    public class BllCustomer
    {
        public List<ModelCustomer> GetCustomers()
        {
    
        }
    }
    
    // usage
    BllCustomer bllCustomer = new BllCustomer();
    bllCustomer.GetCustomers();
    
    Run Code Online (Sandbox Code Playgroud)

    3选项

    public class BllCustomer
    {
        public List<ModelCustomer> GetCustomer()
        {
    
        }
    }
    
    // usage
    public static BllCustomer s_BllCustomer = new …
    Run Code Online (Sandbox Code Playgroud)

    static-methods data-access bll

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