4

私は次のものを持っています:

class City {
    int id;
    string Name;
    ICollection<Person> Persons;
}

class Person {
   int id;
   string Name;
}

都市と関連するすべての人を削除する正しい方法はどれですか? おそらく、外部キー制約を避けて手動で行いたいと思います。私はもう試した:

public bool Delete(int id // City Id)
{
    City city = _db.Cities
                .Include(c => c.Persons)
                .First(c => c.Id == id);
    if(city != null)
    {
        foreach (Person person in city.Persons)
        {
            _db.Persons.Remove(person);
        }

        _db.Cities.Remove(city);

        _db.SaveChanges();
        return true;
    }

    return false;
}

しかし、データベースから削除されている人や都市はありません。

4

1 に答える 1

1

あなたのコードは正しいようです...

以下のコードを使用してエンティティを削除することもできます。

foreach (Person person in city.Persons)
{
    _db.Persons.Entry(person).State = EntityState.Deleted;
}

_db.Cities.Entry(city).State = EntityState.Deleted;

_db.SaveChanges();

もう一つ...

Firstを取得するために使用する場合Cityifステートメントは常に一致することが期待されるtrueため、ソース シーケンスが空Firstの場合は をスローします。InvalidOperationException

コードを見るとtrue、一致がidあり、削除が実行された場合はメソッドが返され、一致がなかった場合はが返されることがわかりますfalsecitynull使用する必要があるため、FirstOrDefaultソースシーケンスが空の場合に処理される型のデフォルト値を返します。この場合は になりますnull

于 2013-01-15T23:55:16.050 に答える