0

私はEFオブジェクトを持っています:

public class User
{

    [Key, Column("userid", TypeName = "int")]
    public Int32 UserId { get; set; }

    [Column("username", TypeName = "varchar")]
    public String UserName { get; set; }

    [Column("password", TypeName = "varchar")]
    public String Password { get; set; }

    [Column("name", TypeName = "varchar")]
    public String Name { get; set; }

    [Column("surname", TypeName = "varchar")]
    public String Surname { get; set; }

    [Column("email", TypeName = "varchar")]
    public String Email { get; set; }

    [Column("dob", TypeName = "datetime")]
    public Nullable<DateTime> Dob { get; set; }

    [Column("notes", TypeName = "nvarchar")]
    public String Notes { get; set; }

    [Column("masterentity", TypeName = "varchar")]
    public String MasterEntity { get; set; }

    [Column("propertyid", TypeName = "int")]
    public Nullable<Int32> PropertyId { get; set; }

    [Column("boardmember", TypeName = "bit")]
    public Boolean BoardMember { get; set; }

    [Column("occupiesunit", TypeName = "bit")]
    public Boolean OccupiesUnit { get; set; }

    [Column("systemuser", TypeName = "bit")]
    public Boolean SystemUser { get; set; }

    [Column("isactive", TypeName = "bit")]
    public Boolean IsActive { get; set; }


    #region Foreing Keys

    [ForeignKey("MasterEntity")]
    public virtual Entity CurrentMasterEntity { get; set; }

    #endregion

}

クライアント側では、次のようにモデルを JSON オブジェクトにシリアル化しようとしています。

var jsonUser = @(Html.Raw(Json.Encode(this.Model))); 

次のエラーが表示されます。

A circular reference was detected while serializing an object of type ....

私が気付いているのは、Foreing Keys Fluent API を削除すると

[ForeignKey("MasterEntity")]
public virtual Entity CurrentMasterEntity { get; set; }

その後、完璧に機能します。そのため、他のエンティティと関係のあるエンティティまたはオブジェクトは、JSON を使用してシリアル化できないようです。

誰でもこれを解決する良いアプローチを持っていますか? EF 5.0 はこの問題を解決しますか?

どうもありがとう。

4

1 に答える 1

0

エンティティ間に循環参照がない限り、リレーションを使用してエンティティをシリアル化できます。これは、 を指していて をA指している場合、それはうまくいかないことを意味します。あなたがエンティティ自体と等しいか、または循環グラフ (A が B のマスター、B が A のマスター) になる可能性があるとは思えないので、データ エラーまたは双方向ナビゲーション (ほとんどの場合それは形で来ます)。それがデータエラーである場合は、修正してください。双方向ナビゲーションを使用している場合は、シリアル化するプロパティを 1 つ選択し、他のプロパティをマークしてシリアル化しないようにする必要があります。BBACurrentMasterEntityEntity ParentICollection<Entity> Children[ScriptIgnore]

CurrentMasterEntityただし、クライアント側で本当に必要ない場合は、前述の でマークして[ScriptIgnore]ください。

于 2012-07-24T17:56:43.593 に答える