2016-04-16 5 views
1

私はこのポストの目的のための簡単なモデルを持っています。これは予想されるEntity Framework 7/Coreの動作かバグですか?

2つのエンティティロールと個人。

public class Role : Entity 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Person> PeopleWithThisRole { get; set; } 
} 

public class Person : Entity 
{ 
    public Guid Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public Guid? RoleId { get; set; } 
} 

私はEFコンテキストから役割を取得する場合、私はそれらを.Includeない限り、予想通り、その後、PeopleWithThisRoleコレクションは。(空である。

しかし、私は役割を取得し、私は、以下のように人々を取得する場合

var roles = _context.Roles.ToList(); 
    var people = _context.People.ToList(); 

その後roles.PeopleWithThisRoleコレクションは完全に.Includeにそれをせずに、人々が移入されます。

これは予想される動作ですか、これをバグとして提起する必要がありますか?

おかげ以下@hvdするために多くのおかげで

UPDATE

は、私はそれらの特性Iを除外した(DTOSにマッピングする代わりに、きれいなエンティティを維持していない[JsonIgnore]属性を使用してすることにしましたおそらく正しい方法でしょうか?)

答えて

3

EFの以前のバージョンがどのように機能しているかは予想されます。

_contextは、変更を保存できるように、そのコンテキスト内に読み込まれたエンティティを追跡します。そのコンテキストの中では、Personオブジェクトがロードされており(要求に応じて)、その値は既知です。同じ文脈の中で、同じIdの値を持つRoleのオブジェクトが読み込まれました(あなたの要求でも)。 EFは、それらのIDに基づいてメモリ内のオブジェクトをリンクします。サーバーに送信されたSQL照会をトレースすると、要求したもの以外の照会が送信されていないことがわかります。

+0

私は今それを得る。私はSQLをチェックして、あなたは正しいです、それは参加していません。私が必要とする以上のデータを返すWeb APIからJSONとして返すときに問題が発生します。私はDTOにマップするか、返す前にコレクションをクリアすることができますが、これはほとんど制御できないようです:-( –

+0

@MarkChidlowシリアライザからプロパティを除外したい場合があります。 .NETの場合、 '[JsonIgnore]'属性を追加するだけです(プロパティを直列化したい場合は、それでも可能ですが、もっと難しくなります)。 – hvd

+0

ありがとうございます。 –

関連する問題