Why am I getting "is inaccessible due to its protection leve

  • Thread starter Thread starter SlurrerOfSpeech
  • Start date Start date
  • Tags Tags
    Protection
Click For Summary
SUMMARY

The error "System.Data.Entity.DbSet.DbSet() is inaccessible due to its protection level" occurs because the constructor of DbSet is protected and cannot be instantiated directly. Instead, DbSet instances should be created through a DbContext object. The discussion highlights the need to modify the SurveyDbModel class to include a DbContext, which will manage the DbSet instances correctly. This adjustment resolves the accessibility issue and aligns with Entity Framework best practices.

PREREQUISITES
  • Understanding of Entity Framework 6.0 and its DbSet class
  • Familiarity with C# access modifiers and object-oriented programming concepts
  • Knowledge of SQL Server and ADO.NET for database operations
  • Experience with Visual Studio 2013 for C# development
NEXT STEPS
  • Learn how to implement a DbContext in Entity Framework 6.0
  • Research best practices for managing DbSet instances within a DbContext
  • Explore the use of migrations in Entity Framework for database schema management
  • Understand the role of access modifiers in C# and their impact on class instantiation
USEFUL FOR

Developers working with Entity Framework, C# programmers troubleshooting DbSet instantiation issues, and anyone involved in database-driven application development using Visual Studio.

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.
 
Technology 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.
 

Similar threads

Replies
3
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 28 ·
Replies
28
Views
3K
Replies
6
Views
1K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K