1

Web Api プロジェクトで url localhost:[portnumber]/api/osを入力すると、エラーを含む長い XML ファイルが表示されます。例外メッセージは次のとおりです。

Type 'System.Data.Entity.DynamicProxies.CollegeCourse_C7F37B1980970AF17607E96F17DFE50E3A680141BF8228EEA7D39A9150498388' with data contract name 'CollegeCourse_C7F37B1980970AF17607E96F17DFE50E3A680141BF8228EEA7D39A9150498388:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' is not expected. DataContractResolver の使用を検討するか、既知の型のリストに静的に認識されていない型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。

しかし、url localhost: [portnumber]/api/roleを入力すると、すべて問題ありません。コードは次のとおりです。

OS:

public class UserOS
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public int UserOSId { get; set; }

    public Guid UserId { get; set; }

    public string OSType { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }
}

役割:

public class UserRole
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public int RoleId { get; set; }

    public string Name { get; set; }

    public ICollection<User> Users { get; set; }

}

また、Role と OS の API コントローラーは似ているため、Role のみを貼り付けます。

  private CompeteDataBase _competeDataBase = new CompeteDataBase();

   public IEnumerable<UserRole> GetAllRoles()
   {
       return _competeDataBase.UserRoles.AsEnumerable();
   }

編集

DTOを使用する正しい方法ですか?

4

2 に答える 2

6

これは、EntityFramework がクラスの「プロキシ」を作成するためです。

これを機能させるには、プロキシの作成を無効にするだけです。Context コンストラクターに移動して、以下を追加できます。

ContextOptions.ProxyCreationEnabled = false;
于 2012-12-09T00:17:11.700 に答える
0

どういうわけか問題を解決できました。方法や理由はわかりませんが、データベースを削除して再度クレートするとすべてが解決しました(他には何も変更しませんでした)

誰かが理由を知っていますか???

于 2012-12-09T01:34:25.673 に答える