我想使用ONLY數據註釋來映射多對多關係,所以這是我的情況。EF CF通過數據註釋的m-to-n關係
說我有如下表
Foo:
FooId int identity
FooName varchar(max) not null
Bar:
BarId int identity
BarName varchar(max) not null
FooBarRelationships
TheBarId int
TheFooId int
正如你可以看到結表包含源不同FK名稱。此外,該表的名稱也不同
我的類如下
[Table("Foo")]
public class Foo {
[Key]
public Int32 FooId { get; set; }
public String FooName { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
[Table("Bar")]
public class Bar {
[Key]
public Int32 BarId { get; set; }
public String BarName { get; set; }
public IEnumerable<Foo> Foos { get; set; }
}
我應該如何才能利用數據註解來告訴表FooBarRelationships
是結合表和TheBarId
是修改我的課來自Bar
表的外鍵和TheFooId
的外鍵是Foo
表中的外鍵?
P.S.
將導航屬性聲明爲IEnumerable<T>
,而不是ICollection<T>
是必不可少的。
我試着使用地圖類,它看起來如下
public class BarMap : EntityTypeConfiguration<Bar> {
public BarMap() {
this.HasMany(t => t.Foos)
.WithMany(t => t.Bars)
.Map(m => {
m.ToTable("FooBarRelationships");
m.MapLeftKey("TheBarId");
m.MapRightKey("TheFooId");
});
}
}
這給了我下面的錯誤映射。
的類型參數方法「System.Data.Entity.ModelConfiguration.EntityTypeConfiguration <酒吧> .HasMany <TTargetEntity>(System.Linq.Expressions.Expression < System.Func <酒吧,ICollection的<TTargetEntity> > > )'不能從使用情況中推斷出來。嘗試明確指定類型參數。
如果在不改變IEnumeralbe<T>
到ICollection<T>
的類型的情況下解決此錯誤的方法也受到歡迎。
謝謝您的回覆。我恢復了ICollection,並以不破壞內涵的方式重組瞭解決方案。你能回答問題的第一部分,關於提供表格元數據而不使用流利的API,只是dataannotations? – Oybek