实体框架将数据添加到多表格中

时间:2016-11-09 07:57:38

标签: c# mysql entity-framework mariadb

对于我当前的项目,我想从ObservableCollection中添加新数据。 Collection包含一个大对象,其中包含我使用的三个表的所有属性。我使用Visual Studio 2015中的Entity Framework 5.0,最新版本的MariaDB和最新版本的mysql-connector。 不幸的是我还没找到多个表的例子;只为一个。 所以我尝试了这个,但它在EntityFramework.dll中总是抛出一个DbEntityValidationException:

foreach(ZeichnungInDB zeichnungInDB in zeichnungen)
        {
            zeichnungInDB.Volante_Index = getVolCountByDrawingNumber(zeichnungInDB.Zeichnungsnummer)+1;
            using (DMSContext db = new  DMSContext())
            {
                var zeichnung = new zeichnung()
                {
                    Zeichnung_ID = zeichnungInDB.Dateiname + "_" + zeichnungInDB.Index + "_VOL_" + zeichnungInDB.Volante_Index + "_" + new DateTime().ToShortDateString(),
                    Baugruppe = zeichnungInDB.Baugruppe,
                    Baugruppe_Hauptzeichnung = zeichnungInDB.Baugruppe_Hauptzeichnung,
                    Zeichnungsnummer = zeichnungInDB.Zeichnungsnummer,
                    Index = zeichnungInDB.Index,
                    Dateiname_Org = zeichnungInDB.Dateiname,
                    Aenderung_Ext = zeichnungInDB.Aenderung_Ext,
                    Aenderung_Int = "AE_" + zeichnungInDB.Projektnummer + new DateTime(),
                    Dokumententyp = zeichnungInDB.DokumentenTyp,
                    Dateiendung = zeichnungInDB.Extension,
                    Volante_Index = zeichnungInDB.Volante_Index,
                    MMS_Sachmerkmal = zeichnungInDB.Mms_Sachmerkmal,
                    Status = zeichnungInDB.Status,
                    Aenderung_Bemerkung_Txt = zeichnungInDB.Aenderung_Bemerkung_Text,
                    Einzel_Bemerkung_Txt = zeichnungInDB.Einzel_Bemerkung,
                    Ahang_Link = zeichnungInDB.Anhang_Link,
                    Einzel_Link = zeichnungInDB.Einzel_Link,
                };

                var projekt = new projekt()
                {
                    Projektnummer = zeichnungInDB.Projektnummer,
                };

                var tag = new tag()
                {
                    Tag1 = zeichnungInDB.Tag,
                };

                //var zeichnung = new zeichnung();
                //zeichnung.

                db.zeichnungs.Add(zeichnung);
                db.projekts.Add(projekt);
                db.tags.Add(tag);
                db.SaveChanges();
            }
        }

我知道代码并不是那么高效。但我只是希望它有效。最好的方法是在一个步骤中为数据库提供集合,或者如何在一个数据库访问中插入新数据,但我不知道这是有效的,因为我在完成我的教育三年后辞职。 如果有人能解决我的问题,那将会非常有帮助。

干杯, Only3lue

1 个答案:

答案 0 :(得分:1)

您应该尝试捕获DbEntityValidationException并查看抛出异常的输入:

try
{
    db.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
    Exception raise = dbEx;
    foreach (var validationErrors in dbEx.EntityValidationErrors)
    {
        foreach (var validationError in validationErrors.ValidationErrors)
        {
            string message = string.Format("{0}:{1}", 
            validationErrors.Entry.Entity.ToString(),
            validationError.ErrorMessage);
            // raise a new exception nesting
            // the current instance as InnerException
            raise = new InvalidOperationException(message, raise);
        }
    }
    throw raise;
}