導航屬性我使用的Web API 2 CORS /實體框架6/Breeze.js從亭子單個頁面應用程序和微風查詢並沒有擴張的導航屬性。問題,包括查詢
我會打破它,從服務器到客戶端。
//波蘇斯
public class Foo
{
public int Id { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string SomeData { get; set; }
}
public class FooMap : EntityTypeConfiguration<Foo>
{
public FooMap()
{
HasKey(t => t.Id);
ToTable("Foo");
Property(t => t.Id).HasColumnName("Id");
HasRequired(t => t.Bar).WithMany().Map(t => t.MapKey("BarId"));
}
}
//網頁API配置 //省略靜態類和默認路由 //配置是HttpConfiguration
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
//微風控制器
[BreezeController]
public class FooController : ApiController
{
readonly EFContextProvider<SomeDbContext> _contextProvider =
new EFContextProvider<SomeDbContext>();
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<Foo> Foos()
{
return _contextProvider.Context.Foos;
}
}
//前端地
// main.js
breeze.NamingConvention.camelCase.setAsDefault();
var FooService = (function(breeze) {
var service = "http://localhost:58996/breeze/Foos";
breeze.config.initializeAdapaterInstances({ dataService: 'webApi' });
var manager = new breeze.EntityManager(service);
var entityQuery = new breeze.EntityQuery();
this.getAll = function(callback, errorCallback) {
return manager.executeQuery(entityQuery.from('Foo').take(10).expand('Bar'), callback, errorCallback);
};
})(window.breeze);
var fooService = new FooService();
fooService.getAll(function(data) {
console.log(data);
}, function(error) {
console.log(error);
});
的Fiddler示出了有效載荷JSON:
[
{
"$id":"1",
"$type":"DataAccess.Models.Foo, DataAccess",
"Id":"10",
"Bar":{
"$id":"2",
"$type":"DataAccess.Models.Bar, DataAccess",
"Id":"12",
"SomeData":"Hello World"
}
}
]
但bar
不在鉻陣列中的物體的領域。
編輯:
的解決方案是增加一個屬性來保存BarId
並將其設置爲外鍵。
public class Foo
{
public int Id { get; set; }
public int BarId { get; set; }
public Bar Bar { get; set; }
}
public class FooMap : EntityTypeConfiguration<Foo>
{
public FooMap()
{
HasKey(t => t.Id);
ToTable("Foo");
Property(t => t.Id).HasColumnName("Id");
Property(t => t.BarId).HasColumnName("BarId");
HasRequired(t => t.Bar).WithMany().HasForeignKey(t => t.BarId);
}
}
感謝病房!明天我進入辦公室時我會嘗試一下。我有一種感覺,它可能是與外鍵相關的(關於EF中的一對一關係有稀疏的信息),因爲我不知道它是否與我的POCO或我的映射有關。我需要對映射文件進行任何修改,否則插入新的屬性就足夠了? – Romoku
好的,這裏是更新。你說得對,我需要定義單獨的外鍵屬性。我需要在每個屬性的映射文件中更改兩行。 1)添加'Property(t => t.BarId).HasColumnName(「BarId」);'2)改變HasRequired(t => t.Bar).WithMany()。HasForeignKey(t => t.BarId );'。我會將其編輯到我的問題的底部。謝謝您的幫助! – Romoku
很高興工作。現在你可以完全移除'FooMap',因爲你的'Foo'和'Bar'類符合默認的EF約定。當然你真正的應用程序有真正的類,所以可能有其他原因保持EF Fluent API映射類。 – Ward