900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > server使用abp中调用存储过程 sql_ABP中连接已有数据库执行Sql或存储过程

server使用abp中调用存储过程 sql_ABP中连接已有数据库执行Sql或存储过程

时间:2019-05-22 15:26:04

相关推荐

server使用abp中调用存储过程 sql_ABP中连接已有数据库执行Sql或存储过程

一:在EntityFramework项目中创建类如:ZSWDbContext。

public classZSWDbContext : AbpDbContext

{public ZSWDbContext() : base("ZSWConnectionString")

{//这里设置不会执行//Database.SetInitializer(null);

}}

二:在DataModule.cs类中设置DbContext在项目启动时不检测数据库的一致性。

否则会报The model backing the 'ApplicationDbContext' context has changed since the database was created. Consider using Code First Migrations to update错误。

[DependsOn(typeof(AbpZeroEntityFrameworkModule), typeof(AmoiCoreModule))]public classAmoiDataModule : AbpModule

{public override voidPreInitialize()

{

Database.SetInitializer(new CreateDatabaseIfNotExists());

Database.SetInitializer(null);

Configuration.DefaultNameOrConnectionString= "Default";

}public override voidInitialize()

{

IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

}

}

三:在Core项目中定义执行Sql的接口:

public interfaceISqlExecuter

{///

///执行给定的命令///

/// 命令字符串

/// 要应用于命令字符串的参数

/// 执行命令后由数据库返回的结果

int Execute(string sql, params object[] parameters);///

///创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。///

/// 查询所返回对象的类型

/// SQL 查询字符串

/// 要应用于 SQL 查询字符串的参数

///

IQueryable SqlQuery(string sql, params object[] parameters);

}

然后在EntityFramework中实现该接口:

public classSqlExecuter : ISqlExecuter, ITransientDependency

{private readonly IDbContextProvider_dbContextProvider;public SqlExecuter(IDbContextProviderdbContextProvider)

{

_dbContextProvider=dbContextProvider;

}///

///执行给定的命令///

/// 命令字符串

/// 要应用于命令字符串的参数

/// 执行命令后由数据库返回的结果

public int Execute(string sql, params object[] parameters)

{return_dbContextProvider.GetDbContext().Database.ExecuteSqlCommand(sql, parameters);

}///

///创建一个原始 SQL 查询,该查询将返回给定泛型类型的元素。///

/// 查询所返回对象的类型

/// SQL 查询字符串

/// 要应用于 SQL 查询字符串的参数

///

public IQueryable SqlQuery(string sql, params object[] parameters)

{return _dbContextProvider.GetDbContext().Database.SqlQuery(sql, parameters).AsQueryable();

}

}

四:在构造函数中注入:

private readonlyISqlExecuter _sqlExecuter;publicAppService(ISqlExecuter sqlExecuter)

{

_sqlExecuter=sqlExecuter;

}

然后调用存储过程:

const string sql = "dbo.ResourceDataSync @STATION";var list = _sqlExecuter.SqlQuery(sql, new SqlParameter("@STATION", "石家庄站")).ToList();

注意的地方:

ABP默认是开启事务的,如果在Service中同时调用不同的数据库,会出现

服务器×××上的MSDTC不可用解决办法 错误,关闭事务即可解决:

[UnitOfWork(isTransactional: false)]

参考博客:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。