2016-10-03 1 views
1

ich Problem mit Entity Framework habe ich habe zwei Code erste Klasse Länder und StädteEntity Framework durchführen Update vor löschen, möchte ich dies stoppen

[Table("dbo.Countries")] 
public class Country 
{ 
    public int CountryId { get; set; } 
    public string CountryNameAr { get; set; } 
    public virtual ICollection<City> Cities { get; set; } 
} 

[Table("dbo.Cities")] 
public class City 
{ 
    public int CityId { get; set; } 
    public int CountryId { get; set; } 
    public string CityNameAr { get; set; } 
    public virtual Country Country { get; set; } 

} 

jedes Land viele Stadt haben ,,, ich bereits einige Länder hinzugefügt und Städte. Mein Problem ist: Wenn ich ein Land lösche, wird es countryId in Städten auf null aktualisieren. und ich schrieb bereits in DbContext:

ModelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     ModelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 

, wenn ich es in SQL Server verfolgen ... Entity Framework in Städten Update Statement Tabelle dann Anweisung in der Ländertabelle löschen ...

exec sp_executesql N'UPDATE [dbo].[Cities] 
SET [CountryId] = NULL 
WHERE ([CityId] = @0)  

exec sp_executesql N'DELETE dbo.Countries 
WHERE (CountryId = @0)',N'@0 int',@0=6 

i will das zu stoppen .. Ich will Entity Framework ablehnen löschen, wenn ihre ist fk_ bezogen auf jede Tabelle jemand weiß, wie dieses Problem zu lösen ????

+0

Machen Sie nicht Ihre vollständige Logik in Entity Framework FK Abhängigkeit zu finden, müssen Sie Abhängigkeiten überprüfen, bevor Sie Wert zu löschen. – GauravKP

+0

Wie werde ich plz überprüfen, weil ich Code zuerst verwende ??? Wie mache ich meine komplette Logik in Entity Framework FK Abhängigkeit – Ayman

Antwort

1

Sie sollten die Abhängigkeit überprüfen, bevor Sie Daten löschen. Es wird einen Fehler ausgeben, wenn eine Fremdschlüsselabhängigkeit vorliegt und Sie versuchen, den Primärschlüsselwert zu löschen, von dem die Tabellendaten abhängig sind. Es gibt zwei Möglichkeiten, die Abhängigkeit entweder manuell zu überprüfen oder Entity Framework zu verwenden, um die Abhängigkeit zu finden. Zum manuellen Überprüfen der Spaltendatenabhängigkeit wird die folgende Syntax die Anzahl finden.

using (var context = new YourDbContext()) 
{ 
    //check if the Country is not in used in City table 
    var count = context.ModelNameGivenForCityDb.Count(u => u.CountryId== countryKeyToDelete); 
    if(count == 0) 
    { 
     // code to delete 
    } 
} 

Andere Möglichkeit ist die Fremdschlüsselbeziehung mit EF zur Laufzeit (beachten Sie diese Logik werden Sie auf Datenbank Constraint abhängig machen Code) zu finden. Überprüfen Sie den untenstehenden Link Fremdschlüsselbeziehung

Read foreign key metadata programatically with Entity Framework 4

2

Ersetzen Sie Ihre City Modell mit dem Code unten, alles, was Sie tun müssen, ist Entity zu zu sagen, dass Country erforderlich ist, für eine City existieren:

[Table("dbo.Cities")] 
public class City 
{ 
    public int CityId { get; set; } 
    public int CountryId { get; set; } 
    public string CityNameAr { get; set; } 
    [Required] 
    public virtual Country Country { get; set; } 
} 

Nach Country als Required erklärt, der Fremdschlüssel gewonnen Wird nicht als Nullable Spalte generiert.

+0

Vielen Dank mein Hauptproblem gelöst ... Aber was ist, wenn das Feld nicht benötigt ... Ich möchte aufhören zu ändern FK_ auf Null Wenn Sie einen Primärschlüssel löschen .. – Ayman

+0

Sie müssen EntityFramework mitteilen, dass die Beziehung für jede der Entitäten erforderlich ist. – sachin

+0

Ich möchte es als meine Datenbank, wenn es FK_ Entity Framework muss mich warnen. Wenn ich vergesse [Required] in Entity Framework zu setzen, werden einige wichtige Daten für mich gelöscht ... – Ayman

Verwandte Themen