【问题标题】:Retrieving data from Oracle db in asp.net mvc using linq使用 linq 从 asp.net mvc 中的 Oracle db 检索数据
【发布时间】:2017-02-23 11:43:04
【问题描述】:

我是新手,经验不足一年。可悲的是,我的公司里没有人可以问,所以我花了很多时间来找出问题所在。

我刚刚完成了 asp.net mvc 项目并尝试只更改 DB
来自:SQL Server
至:甲骨文

在我最初的项目中,我从 SQL Server 中检索到这样的数据。效果很好。

using (var haksaContext = new HaksaContext())
{
    try{
        var haksa = haksaContext.HaksaMembers.Where(m => m.stnt_numb == model.Stnt_Numb).ToList();
        if (haksa.Count == 1){

我的代码在 SQL Server 中没有问题,因此我搜索并安装了适用于 Oracle 的 Nuget 包、适用于 VS 2015 的 Oracle 开发人员工具,并成功地将 Oracle DB 添加到我的服务器资源管理器中。并且OracleDB中的目标表具有相同的列名,结构。(实际上在数据类型上存在一些差异,如int number)

如果我使用查询窗口进行查询,我可以从目标表中进行选择。这里似乎没有问题:

我复制了原始的 dbcontext(HaksaContext) 来制作 OracleContext 并像下一张照片一样修改它

public class HaksaContext : DbContext //-> OracleContext
    {
        public HaksaContext() : base("HaksaContext") { } //-> OracleContext
        public DbSet<UniversityMember> HaksaMembers{get; set;} //Didn't fix here because table structure is the same
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

然后我修改了linq部分:

using (var haksaContext = new OracleContext())
{
    try{
        var haksa = haksaContext.HaksaMembers.Where(m => m.stnt_numb == model.Stnt_Numb).ToList();
        if (haksa.Count == 1){

但它不检索数据和客家语。计数为 0

我尝试调试,发现连接字符串很奇怪。在我的 web.config 中,我使用了这个

<add name="OracleContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=myid;Password=mypw;(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=targetdbIP)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=haksadb)))" />

它与我在 web.config 中的 connectionString 相距甚远。。这个 connectionString 是从哪里来的。。

Data Source=(localdb)\mssqllocaldb;AttachDbFilename=|DataDirectory|OraleContext.mdf;Initial Catalog=OraleContext;Integrated Security=True;MultipleActiveResultSets=True

如果我从原始项目中调试,该部分显示的 connectionString 与我在 web.config 中键入的完全相同

【问题讨论】:

  • 所以代码没有抛出任何异常?
  • Oracle 的连接字符串与 sql server 的连接字符串看起来也有很大不同。 Oracle 使用 tnsnames.ora 文件将连接映射到特定的 oracle 服务实例。您发布的连接字符串是一个完整的条目,您可以在 tnsnames.ora 文件中找到它。将这些信息保存在连接字符串中而不是 tnsnames 文件中是我书中的一个优点,因为它可以减少您对 oracle 客户端的依赖。
  • 不,先生,它在显示奇怪的 Data Source=(localdb)\mssqllocaldb; 之前没有显示异常;~~ 在这一步之后,它会抛出异常,例如 Enumerable 没有返回任何内容。我认为这只是因为图片中的connectionString。不知道这是从哪里来的xd

标签: c# asp.net-mvc oracle linq entity-framework-6


【解决方案1】:

默认情况下,Entity Framework 使用与 DbContext 同名的连接字符串。

在您的情况下,将连接字符串更改为

<add name="HaksaContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="..." />

我知道可能为时已晚:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多