Я хочу сопоставить отношения многие к маю, используя ТОЛЬКО аннотации данных, так что это мой случай.
Скажем, у меня есть следующая таблица
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
?
PS
Имеянавигационные свойства, объявленные как 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 (System.Linq.Expressions.Expression>) 'не может быть выведено из использования.Попробуйте явно указать аргументы типа.
Если есть способ устранить эту ошибку без изменения типа IEnumeralbe<T>
на ICollection<T>
, это также приветствуется.