Cannot instantiate DbSet directly in Entity Framework

  • Thread starter Thread starter SlurrerOfSpeech
  • Start date Start date
  • Tags Tags
    Protection
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
4 replies · 5K views
SlurrerOfSpeech
Messages
141
Reaction score
11
Visual Studio is giving me the error

Error 1 'System.Data.Entity.DbSet<Survey.Models.Survey>.DbSet()' is inaccessible due to its protection level c:\users\jamin\documents\visual studio 2013\Projects\Survey\Survey\Models\SurveyDbModel.cs 83 40 Survey

on the line

Code:
DbSet<Survey> AllSurveys = new DbSet<Survey>();

of

Code:
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace Survey.Models
{

    public class Survey
    {
        public int Id { get; set; }
        [StringLength(100)]
        public string Title { get; set; }
    }

    public class Parnter
    {
        public int Id { get; set;}
        [StringLength(50)]
        public string Name { get; set; }
    }

    public class Question
    {
        public int Id { get; set; }
        public int SurveyId { get; set; }
        [StringLength(300)]
        public string QText { get; set; }
    }

    public class Answer
    {
        public int Id { get; set; }
        public int QuestionId { get; set; }
        public int PartnetId { get; set; }
        public decimal Val { get; set; }
    }

    public class SurveyDbModel
    {
        // name of connection string for database that
        private static readonly string _ConnStrName = "LocalDb";

        private SqlConnection _Conn;

        public SurveyDbModel ( )
        {
            this._Conn = new SqlConnection(ConfigurationManager.ConnectionStrings[SurveyDbModel._ConnStrName].ConnectionString);
        }

        ~SurveyDbModel ( )
        {
            this._Conn.Dispose();
        }

        public void AddSurvey ( string survtitle )
        {
            SqlCommand cmd = new SqlCommand("AddSurvey", this._Conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@title", survtitle);
            this._Conn.Open();
            cmd.ExecuteNonQuery();
            this._Conn.Close();
        }

        public void DeleteSurvey ( int survid )
        {
            SqlCommand cmd = new SqlCommand("DeleteSurvey", this._Conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@id", survid);
            this._Conn.Open();
            cmd.ExecuteNonQuery();
            this._Conn.Close();
        }

        public DbSet<Survey> GetAllSurveys ( )
        {
            SqlCommand cmd = new SqlCommand("GetAllSurveys", this._Conn);
            cmd.CommandType = CommandType.StoredProcedure;
            this._Conn.Open();
            DbSet<Survey> AllSurveys = new DbSet<Survey>();
            using ( SqlDataReader dataReader = cmd.ExecuteReader() )
            {
                while ( dataReader.Read() )
                {
                    Survey srv = new Survey
                    {
                        Id = int.Parse(dataReader[0].ToString()),
                        Title = dataReader[1].ToString()
                    };
                    AllSurveys.Add(srv);
                }
            }
            this._Conn.Close();
            return AllSurveys;
        }

        public DbSet<Question> GetQuestionsBySurveyId ( int survid )
        {
            SqlCommand cmd = new SqlCommand("GetQuestionsBySurveyId", this._Conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@id", survid);
            this._Conn.Open();
            DbSet<Question> TheseQuestions = (DbSet<Question>)cmd.ExecuteScalar();
            this._Conn.Close();
            return TheseQuestions;
        }

    }
}

Any idea why? Personally, I can't see how any access modifiers are getting in the way of me creating a DbSet<T> where T is a Survey.
 
Physics news on Phys.org
Looks like an access problem on the OS level. Check you're Windows rights in the folder.
 
SlurrerOfSpeech said:
c:\users\jamin
Just checking the obvious - that is your user directory, correct?
 
Another possibility is that you might need and have forgotten a DB sign-on.
 
SlurrerOfSpeech said:
Visual Studio is giving me the error

Error 1 'System.Data.Entity.DbSet<Survey.Models.Survey>.DbSet()' is inaccessible due to its protection level c:\users\jamin\documents\visual studio 2013\Projects\Survey\Survey\Models\SurveyDbModel.cs 83 40 Survey

on the line

Code:
DbSet<Survey> AllSurveys = new DbSet<Survey>();
...
I think it's because the constructor of DbSet<T> is protected and so its instance in this case should be created from the context object.