如何使用不同的键映射单向关系

时间:2014-12-08 13:15:02

标签: .net entity-framework

我喜欢将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");});***

谢谢,

1 个答案:

答案 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是不可为空的类型。