Linq to SQL intellisense не знает таблиц в объекте datacontext.

Я могу успешно подключиться к базе данных с моим объектом datacontext. Я могу успешно читать и записывать в базу данных, однако я не могу использовать тот же синтаксис, который, похоже, используют другие.

Например, когда мне нужны данные из таблицы, я должен сделать что-то вроде этого:

db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);
IQueryable Users = db.GetTable<User>();

Я хотел бы иметь возможность писать запросы linq, например, как я вижу, как их делают другие:

db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);
var query = from u in db.User
            where u.UserName == "Test"
            select u;

Но intellisense не распознает User как свойство db и поэтому не компилируется. Intellisense не показывает никаких свойств, связанных с таблицами или объектами моей базы данных.

Вот сообщение об ошибке, которое я получаю:

'System.Data.Linq.DataContext' does not contain a definition for 'User' and no extension method 'User' accepting a first argument of type 'System.Data.Linq.DataContext' could be found (are you missing a using directive or an assembly reference?)

Вот краткое изложение того, что я делаю:

Я воспользовался конструктором баз данных, перетащил таблицы в нужное место.

Затем я сохранил его как файл dbml.

Затем он создал новый класс, расширяющий для меня dataContext, с именем UserDataDataContext. Затем я создаю новый экземпляр UserDataDataContext с именем db, передав мою строку подключения из Web.config.

Затем я пытаюсь написать запрос linq, ссылающийся на имена таблиц как на свойства объекта db, но он их не распознает.

Похоже, я не могу найти, что делаю неправильно, по сравнению со всеми примерами, которые я читал. Любые идеи?


person Sgraffite    schedule 31.10.2010    source источник


Ответы (1)


Я уверен, что у вас где-то есть следующее объявление переменной:

// variable is of type System.Data.Linq.DataContext
DataContext db;

Измените его на:

// variable is now of the appropriate subclass's type
UserDataDataContext db;

Если db - локальная переменная, и вы можете позволить себе встроить инициализацию и объявление вместе, было бы даже лучше вместо этого использовать неявную типизацию:

// db is implicitly of type UserDataDataContext
var db = new UserDataDataContext(WebConfigurationManager.ConnectionStrings["UserData"].ConnectionString);

C # - это безопасный и статически типизированный язык. Хотя объект, на который ссылается ваша ссылка, действительно во время выполнения будет иметь ожидаемые свойства, компилятор не позволит ему скомпилировать, потому что эти свойства не существуют в тип переменной.

person Ani    schedule 31.10.2010