Вставка в базу данных с помощью LINQ

1

У меня возникла проблема с обнаружением моей базы данных. Недавно я добавил базу данных, как вы можете видеть на изображении ниже, и мой запрос выглядит правильно (sql ниже, это то, что linq собирается заменить), но я не уверен, почему Visual Studio не обнаруживает мою базу данных. Когда я пытаюсь добавить

using System.Data.Entities

Я не могу найти его, и я его не использую.

Мои текущие поступления:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

Следующий снимок экрана может помочь вам понять, что я пытаюсь сказать (откройте изображение на новой вкладке, чтобы просмотреть его в масштабе 100%):

Изображение 174551

Заранее спасибо за помощь!

Теги:
database

2 ответа

3
Лучший ответ

У вас есть несколько вопросов:

  1. Вы не добавили модель в свой проект. Я не вижу никаких связанных с ORM файлов в Solution Explorer для SqlIntegrationWithVs.

  2. После добавления модели, учитывая, что BloodBank не является свойством класса Register; таким образом, он все еще не будет существовать в текущем контексте.

    В общем, ORM помещают классы с табличным отображением в отдельное пространство имен, например BloodBankDatabase.BloodBanks, и объекты, которые позволяют вам обращаться к табличным данным, помещаются в определенный класс, поэтому вы получите что-то вроде:

    using BloodBankDatabase;
    
    using (var context = new DatabaseContext(connectionString))
    {
        var returnedPerson = from loginDetails in BloodBank
                             where loginDetails.Username == usersInput
                             select loginDetails.Username;
    }
    

Кроме того, глядя на свой код, вы, похоже, не понимаете, как работает С#. Например:

  • Вы не должны вызывать cmd.Dispose() внутри using (SqlCommand cmd =...) { }, потому что using уже делает это.

  • SqlDataReader реализует IDisposable, поэтому вы забыли using() { } вокруг него.

  • Вы не должны исключать Exception.

  • where Username == usersInput не имеет смысла в этом контексте; вы уверены, что понимаете лямбда-выражения?

  • Не bool usernameTaken = false; , Вместо этого объявите переменную как можно ближе к месту, где вы ее используете в первую очередь.

  • Проверяйте свои входы перед их использованием. Что произойдет, если userInput пуст? Или очень долго?

Как вы можете улучшить?

  1. Stack Oveflow не является веб-сайтом проверки кода. Как только вы заработаете свой код (и только тогда), вы можете быть заинтересованы в отправке его на https://codereview.stackexchange.com/

  2. Вы также можете быть заинтересованы в чтении книги, чтобы узнать С#. С# in Depth by Jon Skeet - это де-факто книга, которую должен прочитать любой начинающий С#.

  3. Если вы работаете в компании, настаивайте на выполнении обзоров кода для каждой строки совершенного кода. Попытайтесь получить более опытных разработчиков, чтобы просмотреть ваш код. Если нет, найдите кого-нибудь (друга, старого коллегу), который готов рассмотреть ваш код.

  4. Анализ кода, доступный в платных версиях Visual Studio, укажет на такие проблемы, как забытые блоки using() { }. Это намного проще, чем проверка на MSDN каждого класса, который вы используете, чтобы увидеть, реализует ли он IDisposable.

  5. StyleCop - еще один инструмент, который может вас заинтересовать: он не найдет ошибок как таковых, но заставит вас использовать единый стиль в базе кода.

  • 0
    Спасибо, вы указали мне в правильном направлении.
  • 0
    @mainwa Я должен отметить, что после прочтения вашего поста в полном объеме, теперь у меня есть несколько ответов на некоторые вещи, которые вы сказали (нет необходимости комментировать 100% правильные вещи, поскольку они мне помогли). Что вы подразумеваете под "SqlDataReader реализует IDisposable, поэтому вы забыли об использовании using () {}."? Я менял свое исключение раньше, отсюда и незавершенный улов. Я знаю, у меня был менталитет sql в голове, и, так как я не мог видеть, что это неправильно, я не мог исправить это. Я объявляю элемент, который собираюсь вернуть в начале метода, для равномерного чтения. usersInput проверяется в валидации
Показать ещё 1 комментарий
0

Попробуйте добавить

using System.Linq;

при использовании операторов.

  • 0
    Я уже использую это. Я добавлю свои операторы использования в ОП. Спасибо за ваше предложение, хотя!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню