Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq在asp.net mvc中从Oracle数据库检索数据_C#_Asp.net Mvc_Oracle_Linq_Entity Framework 6 - Fatal编程技术网

C# 使用linq在asp.net mvc中从Oracle数据库检索数据

C# 使用linq在asp.net mvc中从Oracle数据库检索数据,c#,asp.net-mvc,oracle,linq,entity-framework-6,C#,Asp.net Mvc,Oracle,Linq,Entity Framework 6,我是个新手,经验不足一年。可悲的是,我的公司里没有人可以问,所以我花了很多时间来找出问题所在 我刚刚完成asp.net mvc项目,并尝试仅更改DB 发件人:SQL Server 收件人:甲骨文 在我最初的项目中,我从SQLServer检索到了类似这样的数据。效果很好 using (var haksaContext = new HaksaContext()) { try{ var haksa = haksaContext.HaksaMembers.Where(m =>

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

我刚刚完成asp.net mvc项目,并尝试仅更改DB
发件人:SQL Server
收件人:甲骨文

在我最初的项目中,我从SQLServer检索到了类似这样的数据。效果很好

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)
        {
        }
但它不检索数据,还有haksa。计数为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中键入的完全相同。默认情况下,Entity Framework使用与DbContext同名的连接字符串

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

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


我知道这可能太晚了:)

所以代码没有抛出任何异常?而且Oracle的连接字符串看起来将与sql server的连接字符串大不相同。Oracle使用tnsnames.ora文件将连接映射到特定的Oracle Server实例。您发布的连接字符串是您可以在tnsnames.ora文件中找到的完整条目。在我的书中,将此信息保存在连接字符串中而不是tnsnames文件是一个优点,因为它可以减少您对oracle客户端的依赖。不,先生,在显示奇怪的数据源=(localdb)\mssqllocaldb;~~之前,它不会显示异常在那个步骤之后,它抛出异常,就像Enumerable并没有返回任何东西一样。我认为这只是因为图片中的连接字符串。不知道那是从哪里来的
Data Source=(localdb)\mssqllocaldb;AttachDbFilename=|DataDirectory|OraleContext.mdf;Initial Catalog=OraleContext;Integrated Security=True;MultipleActiveResultSets=True
<add name="HaksaContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="..." />