Entity Framework Zirkelbezug
Versuchen, diese Frage nochmal, weil mein Erster Versuch war kaum zusammenhängend :p
So, ich bin super verwirrt und mit Entity Framework Code First -
Habe ich einen Wald-Klasse.
Habe ich eine Tree-Klasse.
Jeder Wald kann viele Bäume
Wenn ich versuche zu serialisieren, ich war immer Zirkelbezug
public class Forest
{
public Guid ID { get; set; }
public virtual List<Tree> Trees { get; set; }
}
public class Tree
{
public Guid ID { get; set; }
public Guid? ForestId {get;set;}
[ForeignKey("ForestId")]
public virtual Forest Forest {get;set;}
}
Jeder Wald hat Bäume, aber nicht jeder Baum in einem Wald. Ich Kämpfe mit für die Fehler der Mannigfaltigkeit, wenn dabei
@(Html.Raw(Json.Encode(Model)))
Wo ist das Modell ein Wald
und wenn ich ForestId
eine Guid
statt einer Guid?
bekomme ich Zirkelbezug-Fehler.
Ich auch versucht
protected override void
OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<Forest>()
.HasMany(x => x.Tree)
.WithOptional()
.HasForeignKey(y => y.ForestId);
}
Vielen Dank im Voraus
Sind Sie mit DataContractSerializer? Wenn dem so ist, kann ich nicht sehen, Ihre DataContracts, aber Sie müssen IsReference=true.
InformationsquelleAutor Jordan | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beste Ansatz wäre, die Sie verwenden sollten DTOs übertragen nur die Daten, die Sie wollen, um den client. Die DTOs sollte nur einfache Eigenschaften, damit es nicht zu schaffen, die einen Zirkelbezug-Fehler. Im moment ist der Wald hat
List<Trees> Trees
und jedeTree
innerhalb der Bäume hatForest
und dassForest
wieder hatList<Trees>
Oder
Können Sie schmücken Sie Ihre Attribute mit
ScriptIgnore
für Eigenschaften, die Sie nicht wollen, dass dieJson.Codieren, serialisieren und dann das nicht zurück an den client gesendet.
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.scriptignoreattribute.aspx
ZB:
Edit:
Zusammen mit
ScriptIgnore
sollten Sie auch entfernenvirtual
ausForest
undTrees
und arbeiten würde. Ich habe es getestet. Allerdings würde ich nicht empfehlen, da virtual-Schlüsselwort ist, was macht das Lazy loading. Daher wie ich sagte, müssen Sie zum erstellen von DTOs auf Basis dieser Modelle und senden nur in DTO client.siehe mein edit.
Ich danke Ihnen sehr. Ich landete realisieren, Letzte Nacht konnte ich mir einen virtuellen off. Ich weiß, es ist nicht die ideale Lösung, aber ich bin einfach prototyping für dieses Projekt so in diesem Fall ist es in Ordnung. In der Produktion in Zukunft arbeiten werde ich in der Tat die Verwendung von DTOs! Ich danke Ihnen sehr!
Willkommen 🙂
InformationsquelleAutor TCM