我喜欢将TypeOne之间的关系映射到Items。 想法是我希望通过Type的GUID使Items可用于任何类型。 EF是否支持这种关系,如何映射关系以包括TypeOne中的项目。
** TypeOne **
+-------+--------+--------+
| id | name | GUID |
+-------+--------+--------+
| 1 | one | 11111 |
| 2 | two | 22222 |
| 3 | three | 33333 |
+-------+--------+--------+
** TypeTwo **
+-------+--------+--------+
| id | name | GUID |
+-------+--------+--------+
| 1 | one | 44444 |
| 2 | two | 55555 |
| 3 | three | 66666 |
+-------+--------+--------+
**项目**
+-------+--------+----------+-----------+
| id | name | type | TypeGUID |
+-------+--------+----------+-----------+
| 1 | one | TypeOne | 11111 |
| 2 | two | TypeTwo | 44444 |
| 3 | three | TypeTwo | 66666 |
+-------+--------+----------+-----------+
TypeOne.cs
public class TypeOne{
[Key]
public int id {get;set;}
public string name {get;set;}
public GUID guid {get;set;}
public virtual ICollection<Items> items {get;set;}
}
Context.cs
ModelBuilder.Entity<TypeOne>.ToTable("TypeOne","TypeOne");
ModelBuilder.Entity<TypeOne>.HasKey(x=>x.id).Property(x=>x.TypeOneid);
***ModelBuilder.Entity<TypeOne>(x=>x.items).WithMany<Item>().Map(m=>{m.MapLeftKey("GUID");m.MapRightKey("TypeGUID");});***
谢谢,
答案 0 :(得分:0)
我想你想要这样的东西......
modelBuilder.Entity<TypeOne>().HasMany(e => e.Items).WithRequired().HasForeignKey(e => e.TypeGUID);
...或...
modelBuilder.Entity<TypeOne>().HasMany(e => e.Items).WithOptional().HasForeignKey(e => e.TypeGUID);
可能是自解释的,第一行代码设置了关系,因此需要Item和TypeOne之间的关系(如果没有TypeOne的实例,则读取,Item的实例不能存在)。第二行代码将此关系设置为可选。我假设前者,因为GUID是不可为空的类型。