7

I am getting null exception for configure Service. I am using Entity Framework 1.1, previously use core 1.0 and have no issue, not sure what I am missing here

Error In Startup.cs --> at Services.AddDbContext...

 {System.ArgumentNullException: Value cannot be null.
 Parameter name: connectionString
 at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value, String parameterName)
at   Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(D bContextOptionsBuilder optionsBuilder, String connectionString, Action`1 sqlServerOptionsAction)
at App.WebDashboard.Startup.<ConfigureServices>b__4_0(DbContextOptionsBuilder options)
at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.DbContextOptionsFactory[TContext](IServiceProvider applicationServiceProvider, Action`2 optionsAction)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider)
at  Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider)
at Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
at lambda_method(Closure , IServiceProvider , Object[] )
at Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance[TInstance](IServiceProvider serviceProvider, Type implementationType)
at Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker. <InvokeNextResourceFilter>d__22.MoveNext()}

Startup.cs

 public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);

        services.AddDbContext<TestDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("UCASAppDatabase")));

        services.AddMvc();
    }

Connection string in appsetting.json

"ConnectionStrings": {
  "UCASAppDatabase": "Data Source=mydatasource;Initial Catalog=UCAS-DB;Integrated Security=True"
}

DbContext

 public class TestDbContext : DbContext
 {
    public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
    { }

    public DbSet<TestModel> TestModels { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TestModel>().ToTable("TestTable");
    }
}

Entity Class

[Table("TestTable")]
public class TestModel
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
}

Controller class where I am trying to read data

public class HomeController : Controller
{
    private readonly TestDbContext _context;
    public HomeController(TestDbContext context)
    {
        this._context = context;
    }

    public IActionResult About()
    {
        var query = (from b in _context.TestModels
                     select b).ToList();

        ViewData["Message"] = "Your application description page.";

        return View();
    }

Appsettings.json

 public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
Toxic
  • 4,369
  • 19
  • 79
  • 183
  • Can you test what is Configuration.GetConnectionString("UCASAppDatabase") returning? – Ricardo Peres Nov 22 '16 at 14:44
  • Put all appsetting.json and try get your connection string using Configuration["Data:ConnectionStrings:UCASAppDatabase"]) – M. Wiśnicki Nov 22 '16 at 14:45
  • mmm, I am getting null value for Configuration["Data:ConnectionStrings:UCASAppDatabase"]) – Toxic Nov 22 '16 at 14:47
  • Possible duplicate of [What is a NullReferenceException, and how do I fix it?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – mybirthname Nov 22 '16 at 14:48
  • 1
    @CodeCaster I retract my close vote. – mybirthname Nov 22 '16 at 15:02
  • does your appsettings.json have the proper schema? i.e., does it have the `Data:ConnectionStrings:UCASAppDatabase` path? Also, have you tried `Configuration["Data:DefaultConnection:ConnectionString"]` instead of `Configuration.GetConnectionString("UCASAppDatabase")`? – Jeremy Holovacs Nov 22 '16 at 15:02
  • Yes I have tried Data:ConnectionStrings: and Configuration["Data:DefaultConnection:ConnectionString"] and still getting null value – Toxic Nov 22 '16 at 15:09
  • i have copy connection string directly from visual studio database properties so I don't think connection string is incorrect – Toxic Nov 22 '16 at 15:10
  • maybe a dumb question, but have you saved and recompiled since you added the connection string? – Jeremy Holovacs Nov 22 '16 at 15:28
  • yes I did, I think there some issue in my connectionstrings... – Toxic Nov 22 '16 at 15:35

3 Answers3

6

found the answer, need to sorted connection-String in appsettings.json

"Data": {
  "UCASAppDatabase": {
    "ConnectionString": "Data Source=mysource;Initial Catalog=UCAS-DB;Integrated Security=True;Persist Security Info=True"
  }
}

and in Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry(Configuration);

        services.AddDbContext<TestDbContext>(options =>
           options.UseSqlServer(Configuration["Data:UCASAppDatabase:ConnectionString"]));

        services.AddMvc();
    }
Toxic
  • 4,369
  • 19
  • 79
  • 183
0

By convention, the file should be called appsettings.json, not appsetting.json. Can you make sure your Startup file is referencing it right?

Ricardo Peres
  • 11,795
  • 4
  • 45
  • 64
  • it is appsettings.json, miss type in writing my question, also update my question at bottom – Toxic Nov 22 '16 at 14:58
0

I had the same problem. In my property class I just added the key DataAnnotations for the primary key attribute as follows and error was solved.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;

namespace Treat_Data.Model
{
    public class Restaurant
    {
        [Key]
        public int Restaurant_ID { get; set; }//this is the primary key
        public string Name { get; set; }
        public string Address { get; set; }
        public string Open_Hours { get; set; }

    }
}
Chamila Maddumage
  • 1,956
  • 1
  • 17
  • 32