0

我遵循所有程序以避免在我的 Wines/Vineyard 项目中进行循环引用。但我得到了我不想要的数据:

在此处输入图像描述

我不希望每一个拥有附属葡萄园的葡萄酒列表都在每次葡萄园列出每种葡萄酒时都有该葡萄园列表。我怎样才能阻止这个?我不想做匿名类型。

更新:

我的数据库上下文:

    public DataContext()
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }

我的路线配置:

        config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

我的控制器:

var response = context.Wines.Include("Vineyard").ToList();

4

1 回答 1

0

你如何序列化你的数据?

只是不要序列化您的wines集合属性。根据您的序列化机制,您可以使用属性(即。ScriptIgnore)标记它或定义具体类型(因为您不喜欢匿名类型)并使用 AutoMapper 复制数据。

将您的 EF 实体直接绑定到 API 的响应并不是最佳设计选择。每次修改数据库架构时,您的 API 都会发生变化。您可以定义 API 控制器将返回的单独类并使用 AutoMapper 复制数据。这样你就可以将你的数据库模式与你的 API 分离。

namespace API {
    class Wine {
        // properties that you want to return goes here
    }
}

Mapper.CreateMap<Wine, API.Wine>(); // Only once during app start
Mapper.Map<Wine, API.Wine>(wine); // AutoMapper will copy data using conventions
于 2012-12-20T22:18:27.700 回答