35

「子」行を削除しようとすると、常に例外が発生します。スニップセットは次のとおりです。

using (var context = new CompanyContext())
{
    ItemType itemType = context.ItemTypes.FirstOrDefault(i => i.Name == "ServerType");
    ItemTypeItem itemTypeItem = itemType.Items.FirstOrDefault(i => i.Name == "DatabaseServer");
    itemType.Items.Remove(itemTypeItem);
    context.SaveChanges(); <=== exception!
}

メソッドで次の例外がスローされSaveChanges()ます。

「1 つ以上の外部キー プロパティが null 値を許容しないため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーがnull 値をサポートしていません。新しい関係を定義する必要があります。外部キー プロパティに別の null 以外の値を割り当てるか、関連のないオブジェクトを削除する必要があります。」

エンティティ構成

  public class ItemTypeConfiguration : NamedEntityConfiguration<ItemType>
  {
    public ConfigurationColumn ParentIDColumn;
    public ConfigurationColumn ValidationPatternColumn;
    public ItemTypeConfiguration() : base()
    {
      ParentIDColumn = new ConfigurationColumn() { Name = "ParentID", Ordinal = base.LastOrdinalPosition + 1 };
      ValidationPatternColumn = new ConfigurationColumn() { Name = "ValidationPattern", Length = 1024, Ordinal=base.LastOrdinalPosition + 2};
      this.Property(t => t.ParentID)
        .HasColumnName(ParentIDColumn.Name)
        .HasColumnOrder(ParentIDColumn.Ordinal);
      this.HasOptional(t => t.Parent).WithMany().HasForeignKey(u => u.ParentID).WillCascadeOnDelete(false);
      this.Property(t => t.ValidationPattern)
        .HasColumnName(ValidationPatternColumn.Name)
        .HasColumnOrder(ValidationPatternColumn.Ordinal)
        .HasMaxLength(ValidationPatternColumn.Length);
    }
...


  public class ItemTypeItemConfiguration : NamedEntityConfiguration<ItemTypeItem>
  {
    public ConfigurationColumn ItemTypeIDColumn;
    public ItemTypeItemConfiguration() : base()
    {
      ItemTypeIDColumn = new ConfigurationColumn(){Name="ItemTypeID", IsRequired=true, Ordinal= base.LastOrdinalPosition+1};
      this.Property(t => t.ItemTypeID)
        .HasColumnName(ItemTypeIDColumn.Name)
        .HasColumnOrder(ItemTypeIDColumn.Ordinal);
      this.HasRequired(t => t.ItemType).WithMany(t=>t.Items).HasForeignKey(u => u.ItemTypeID).WillCascadeOnDelete(true);
    }
...

ここに画像の説明を入力

ブログを見つけましたが、「DeleteObject」メソッドがありません。

http://blog.clicdata.com/2013/07/04/the-operation-failed-the-relationship-could-not-be-changed-because-one-or-more-of-the-foreign-key- properties-is-non-nullable/

何か案は?ありがとうございました。

4

5 に答える 5

51

エンティティ フレームワーク 6.0 では、エンティティをメイン コンテキスト セットから削除すると機能します。たとえば、投資エンティティを削除するには、次のようにします。

context.Investments.Remove(entity);
context.SaveChanges();

これは、次のように、親/所有者からエンティティを削除しようとするのとは異なります。

bankAccount.Investments.Remove(entity);
context.SaveChanges();

これにより、上記の関係を変更できませんでしたという例外がスローされます。お役に立てれば。

于 2014-07-24T17:16:58.717 に答える