ASP.NET MVC вставляет данные из контроллера / представления в базу данных SQL Server (сначала база данных Entity Framework) - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с вставкой данных из поля зрения в базу данных SQL Server.

Когда я нажимаю «Создать» в своем представлении, я получаю сообщение об ошибке, что будет отсутствовать ключ для разных таблиц (например, Kunde / Customer и Ort / City).

Каждая таблица имеет первичный ключ и разные внешние ключи (1: n), определенные в SQL Server Management Studio. Первичный ключ автоматически генерируется SQL Server.

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

Код из моей модели:

public class ViewModelKundeController
{
    public string AnredeText { get; set; }
    public string Vorname { get; set; }
    public string Nachname { get; set; }
    public string Strasse { get; set; }
    public int Hausnummer { get; set; }
    public string Telefon { get; set; }
    public string EMail { get; set; }
    public string Aktiv { get; set; }
    public Nullable<System.DateTime> AGBDatum { get; set; }
    public string Anmerkung { get; set; }
    public string WhatsappAkzeptiert { get; set; }
    public string WebAkzeptiert { get; set; }
    public string AGBAkzeptiert { get; set; }
    public string Postleitzahl { get; set; }
    public string Ort { get; set; }
}

Мои модели данных (используемые для моей Viewmodel) автоматически генерируются подключением Entity Framework (может быть, есть ошибка?)

DbContext класс потомков:

public class KundeDBContext : DbContext
{
    public DbSet<tbl_Kunde> Kunden { get; set; }
    public DbSet<tbl_Ort> Orte { get; set; }
    public DbSet<tbl_Anrede> Anrede { get; set; }
}

Код контроллера:

// GET: Kunde/Create
public ActionResult Create()
{
    return View();
}

[HttpPost]
public ActionResult Create(ViewModelKundeController viewmodel)
{
    var kunde = new tbl_Kunde()
        {
            Vorname = viewmodel.Vorname,
            Nachname = viewmodel.Nachname,
            Strasse = viewmodel.Strasse,
            Hausnummer = viewmodel.Hausnummer,
            Telefon = viewmodel.Telefon,
            EMail = viewmodel.EMail,
            Aktiv = viewmodel.Aktiv,
            AGBAkzeptiert = viewmodel.AGBAkzeptiert,
            WebAkzeptiert = viewmodel.WebAkzeptiert,
            WhatsappAkzeptiert = viewmodel.WhatsappAkzeptiert,
            AGBDatum = viewmodel.AGBDatum,
            Anmerkung = viewmodel.Anmerkung
        };

    var anrede = new tbl_Anrede()
        {
            AnredeText = viewmodel.AnredeText
        };

    var orte = new tbl_Ort()
        {
            Ort = viewmodel.Ort,
            Postleitzahl = viewmodel.Postleitzahl
        };

    kdb.Kunden.Add(kunde);
    kdb.Anrede.Add(anrede);
    kdb.Orte.Add(orte);

    kdb.SaveChanges();

    return View();
}

1 Ответ

0 голосов
/ 01 ноября 2018

Каждая таблица имеет первичный ключ и разные внешние ключи (1: n)

Похоже, что внешние ключи не обнуляются, и это означает, что вы должны предоставить значения для ключей. Вы можете прочитать Создание и изменение отношений , чтобы иметь общее представление.

В вашем случае, если tbl_Kunde имеет внешний ключ для tbl_Ort, это может выглядеть так:

var orte = new tbl_Ort()
{
    Ort = viewmodel.Ort,
    Postleitzahl = viewmodel.Postleitzahl
};

var kunde = new tbl_Kunde()
{
    Vorname = viewmodel.Vorname,
    ...
    Orte = orte 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...