理解を深めるために、いくつかの単純なエンティティを作成します。
public class Room
{
[Required]
public int Id { get; set; }
[Required]
public int Name { get; set; }
[Required]
[Column("House_Id")]
public int HouseId { get; set; }
public virtual House House { get; set; }
}
public class House
{
[Required]
public int Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Room> Rooms { get; set; }
}
ここで、データベースに関連する 4 つの部屋を持つ 1 つの House エンティティがあるとします。家を更新し、2 つの部屋を削除したいと考えています。私はAsp.Net MVC4ところで使用しています。
var house = HouseRepository.Get(id);
house.Name = model.Name; // Some string
house.Name = model.Rooms; // ICollection<Room> from view with 2 rooms in it, cuz user deleted other two in view
HouseRepository.SaveChanges();
return house;
何が起こるかというと、「The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable.」というエラーが表示されます。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
無関係な部屋をデータベースから削除する方法を見つける必要があります。いつ、どこでやればいいですか?私はすでに何かを試しましたが、今は部屋を追加していてもそのエラーが発生します。
これらの部屋を単独で削除する必要があることを EF に伝える簡単な方法はありますか?