【问题标题】:EF - Saving data to DB through Navigation PropertiesEF - 通过导航属性将数据保存到数据库
【发布时间】:2014-10-07 10:30:57
【问题描述】:

我有点困惑,希望你能帮忙。 我尝试将我的数据保存到我的数据库中,该数据库有多个表,我想通过我的 导航属性。但是当我尝试保存数据时,我得到空引用异常(它说我的对象引用没有为任何对象设置 - 我希望我写得很好,我的 VS 把它扔成匈牙利语)。 我尝试了两种不同的方式。

...

.cs:

        Mentett mentett = new Mentett(); //reaching Mentett table through mentett
        KiesoIdo kiesoido= new KiesoIdo();

当我这样做时,我得到一个空引用异常,它表示我的对象引用没有为任何对象设置。当我第一次尝试时,它说的相同,有时插入语句与我什至没有在内部异常中使用的外键冲突。我不明白什么是错的,请帮助我:(

【问题讨论】:

  • 你从哪里得到异常?什么是KiesoIdo?它是一个对象吗?如果是,您必须先创建它。不知道你是不是在 Mentett 的构造函数中初始化了

标签: c# wpf entity-framework


【解决方案1】:

我认为这不是实体框架错误。 否则你会得到一个ValidationError。 更有可能的是,您的属性对象之一未初始化并且 你得到一个 NullReferenceException “对象引用未设置为对象的实例。”

例如KiesoIdo 是否已初始化? 尝试放在行下

Mentett mentett = new Mentett(); 

下面一行:

mentett.KiesoIdo = new KiesoIdo();

要分析验证错误,请在 SaveAllChanges() 周围添加 try-catch 语句

try
{ ... }
catch (DbEntityValidationException exception)
{
  foreach (DbEntityValidationResult validationErrors in exception.EntityValidationErrors)
  {
    foreach (DbValidationError validationError in validationErrors.ValidationErrors)
    {
      string log = string.Format("{0} - {1}",
      validationError.PropertyName, validationError.ErrorMessage);
    }
  }
}

【讨论】:

  • KiesoIdo 是我的表之一,创建为: CREATE TABLE [dbo].[KiesoIdo] ( [KiesoID] int IDENTITY (1, 1) NOT NULL, [Rovidites] NVARCHAR (50) NOT NULL, [Megnevezes] NVARCHAR (MAX) NOT NULL, PRIMARY KEY CLUSTERED ([KiesoID] ASC) );当然,我也把它的外键放到 Mentett 表中。它充满了数据,所以我不知道出了什么问题......当我尝试保存它时,我在 Mentett.KiesoIdo.Kieso 行上遇到了异常。
  • 调试时,在哪一行得到异常? mentett.KiesoIdo 是否为空?您必须使用 mentett.KiesoIdo = new MyKiesoIdoClass() 对其进行初始化
  • KiesoIdo 的所有属性都设置为 NOT NULL,但在例外情况下它在 1 行上写入了 null。以及放置什么 MyKiesoIdoClass();
  • 试着把 Mentett mentett = new Mentett();以下行:mentett.KiesoIdo = new KiesoIdo();您在此处创建一个新对象,稍后将使用 adatbazis.Mentett.Add() 添加到您的数据库上下文中。这里它只是一个具有空属性 KiesoIdo 的对象
  • 你说的有效,但现在在 SaveChanges 行我得到以下异常:{“一个或多个实体的验证失败。有关更多详细信息,请参见 'EntityValidationErrors' 属性。”} Inside ValidationErrors计数=1,{System.Data.Entity.Validation.DbEntityValidationResult}。并将 null 写入 InnerException 行。截图:kepfeltoltes.hu/view/141008/…
猜你喜欢
  • 2019-08-12
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2021-03-08
  • 2014-02-17
  • 2018-02-02
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多