0

我在将数据从视图插入到我的 SQL Server 数据库时遇到了问题。

当我在视图中单击“创建”时,我收到错误消息,即不同表(如 Kunde/Customer 和 Ort/City)会丢失一个键。

每个表都有一个由 SQL Server Management Studio 定义的主键和不同的外键 (1:n)。主键由 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)是由实体框架连接自动生成的(也许有错误?)

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();
}
4

1 回答 1

0

每个表都有一个主键和不同的外键 (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 
};
于 2018-10-31T21:49:55.300 回答