0

Есть сущность GuestResponse

public int GuestResponseIdId { get; set; }
public string Name { get; set; }

public string Email { get; set; }

public string Phone { get; set; }
public bool? WillAttend { get; set; }
public DateTime RData { get; set; }

public virtual List<Report> Reports { get; set; }

Есть сущность Report

public int ReportId { get; set; }
public string NameReport { get; set; }
public string Annotation { get; set; }

public GuestResponse GuestRes { get; set; }

Есть ResponseRepository

 private static ResponseRepository repository = new ResponseRepository();

private List<GuestResponse> responses = new List<GuestResponse>();

public static ResponseRepository GetRepository()
{
    return repository;
}

public IEnumerable<GuestResponse> GetAllResponses()
{
    return responses;
}

public void AddResponse(GuestResponse response)
{
    responses.Add(response);
}

Создан контекст:

public SampleContext():base("SeminarBD")
{
}
public DbSet<GuestResponse> GuestResponses { get; set; }
public DbSet<Report> Reports { get; set; }

Строка подключения:

<connectionStrings>
<add name="SeminarBD" connectionString="data source=PC-9991-002518;
     Initial Catalog=RSVP.SeminarBD.mdf;
     Integrated Security=True;"
     providerName="System.Data.SqlClient" />

Логика:

if (IsPostBack)
    {
        Page.Validate();
        if (!Page.IsValid)
        {
            return;
        }
        GuestResponse rsvp = new GuestResponse(name.Text, email.Text, phone.Text, CheckBoxYN.Checked);
        ResponseRepository.GetRepository().AddResponse(rsvp);

        if (CheckBoxYN.Checked)
        {
            Report report1 = new Report(TextBoxTitle.Text, TextBoxTextAnnot.Text);
            rsvp.Reports.Add(report1);
        }

        if (TextBoxTitle2.Text != "" || TextBoxTextAnnot2.Text != "")
        {
            Report report2 = new Report(TextBoxTitle2.Text, TextBoxTextAnnot2.Text);
            rsvp.Reports.Add(report2);
        }
        try
        {
            SampleContext context = new SampleContext();
            context.GuestResponses.Add(rsvp);
            context.SaveChanges();
        }
        catch (Exception ex)
        {
            Response.Redirect("Ошибка "+ex.Message);
        }

        if (rsvp.WillAttend.HasValue && rsvp.WillAttend.Value)
        {
            Response.Redirect("seeyouthere.html");
        }
        else
        {
            Response.Redirect("sorryyoucantcome.html");
        }
    }

Всё это ради такой вот формы регистрации: введите сюда описание изображения

В итоге всех этих потуг в режиме отладки в блоке try система останавливается на

context.GuestResponses.Add(rsvp);

в попытке создать БД и добавить запись, после перескакивает в блок catch и выдаёт ошибку: введите сюда описание изображения

Я предполагаю, что дело в connectionstring. Пробовал много вариантов, в том числе и

<add name="SeminarBD" connectionString="data source=(localdb)\MSSQLLocalDB;Initial Catalog=RSVP.SeminarBD.mdf;Integrated Security=True;" providerName="System.Data.SqlClient" />

но результат один и тот же.

Почему не создаётся БД ? В чём ошибка ?

  • Response.Redirect("Ошибка "+ex.Message); куда именно это должно отправить юзера? – tym32167 Oct 01 '19 at 11:21
  • @tym32167 эта ошибка вторична. Я менял на реально существующую станицу и всё нормально перенаправлялось. Вопрос в том, почему идёт это перенаправление вместо создания БД ? – Andrey Grek Oct 01 '19 at 12:04
  • ну то есть вы показали ошибку, что вторична, но не показали первичную. Покажите первичную ошибку. Ну и покажите код, который должен создавать вам БД. – tym32167 Oct 01 '19 at 12:09
  • @tym32167 SampleContext context = new SampleContext(); context.GuestResponses.Add(rsvp); context.SaveChanges(); При первом вызове SaveChanges БД должна создаться – Andrey Grek Oct 01 '19 at 12:17
  • При первом вызове SaveChanges БД должна создаться почему? Вы уверены в этом? И так и не показали ошибку вашу первую. – tym32167 Oct 01 '19 at 12:18
  • @tym32167 Чтобы создать базу данных, нужно написать код вставки данных в таблицы.В обработчике события загрузки формы после создания объекта участника семинара rsvp в случае включения флажка создайте первый доклад и добавьте его в коллекцию докладов участника.Далее в случае заполнения полей для второго доклада создайте второй доклад и также добавьте его в коллекцию.Далее создайте экземпляр класса контекста базы данных, после этого добавьте методом Add() созданного участника семинара в базу данных и методом SaveChanges() сохраните изменения в базе данных. – Andrey Grek Oct 01 '19 at 12:48
  • @tym32167 Данный код создает объект контекста SampleContext и использует его, чтобы добавить новые данные в таблицу GuestResponses. Вызов метода SaveChanges() сохраняет изменения в базе данных, а при первой вставке данных вызов SaveChanges() создаст базу данных. Вот чем я руководствуюсь. гуглил, практически везде из того же источника что и в моей методичке. – Andrey Grek Oct 01 '19 at 12:48
  • первой вставке данных вызов SaveChanges() создаст базу данных вот это у меня вызывает сомнения. И вы всё ещё не привели ошибку вашу, то есть мы на кофе гадаем сидим что там у вас не работает. – tym32167 Oct 01 '19 at 13:02
  • @tym32167 я, видимо, Вас не понимаю. Ошибка в том, что не создаётся БД. Процесс создания я описал. Я не понимаю в чём тут ошибка, а она явно есть. Я не могу указать на неё, так как не понимаю что не так. Вероятно, Вы меня подводите к тому, что не SaveChanges() создаёт БД. – Andrey Grek Oct 01 '19 at 13:05
  • 1
    вы говорите об ошибке, которой нет в вашем вопросе. То есть либо вы заблуждаетесь по поводу ошибки, либо ваш вопрос никак не помогает эту ошибку показать. Потому я вас уже несколько раз просил найти изначальную пробслему, ваш изначальный Exception и добавить его детали в вопрос. Я не пойму, в чем проблема поставить брейкпоинт тут Response.Redirect("Ошибка "+ex.Message); и скопипасить детали ошибки в вопрос? Да, я вас подвожу к тому, что SaveChanges() может и не создавать БД, но относится ли это к вашей проблемы без деталей по ошибке вам никто не скажет. – tym32167 Oct 01 '19 at 13:09
  • @tym32167 Ошибка была следующей:"One or more validation errors were detected during model generation:\r\n\r\nCodeFirstNamespace.GuestResponse: : EntityType 'GuestResponse' has no key defined. Define the key for this EntityType.Я не знал как найти этот эксепшен до Вашего совета, поэтому и не понимал что мне надо сформулировать. До конца не понимаю процесс работы отладчика и эксепшенов - ставил точку останова не в том месте. Может подскажите ресурс, на котором стоит изучить работу с отладчиком ? – Andrey Grek Oct 01 '19 at 13:33
  • 2

0 Answers0