我asked this ages ago,但严重地说了这个问题。
我正在尝试指定两个类之间的关系,这不是一个简单的FK映射 - 这是一个预先存在的数据库,而不是我将从EF生成的。
所以,2个对象的简化视图:
public class WidgetDetails
{
[Key]
public int WidgetId { get; set; }
public int WidgetNumber {get; set;}
// Some other props here..
[ForeignKey("WidgetId,WidgetNumber")]
public virtual WidgetProps WidgetProps { get; set; }
}
public class WidgetProps
{
[Key]
public int WidgetPropId { get; set; }
[Key, Column(Order = 0)]
public int WidgetId { get; set; }
[Key, Column(Order = 1)]
public int WidgetNumber { get; set; }
// Some props here...
}
这里的关键是WidgetProps已经有了它自己的PK。但是 - 因为我希望能够使用复合WidgetId和WidgetNumber指定WidgetProps与WidgetDetails相关,我尝试在我的ForeignKey属性中指定它。
然而,这只有在我从WidgetProps.WidgetPropId中删除[KEY]属性时才会起作用 - 因为在EF中,关系是使用键映射的。
我想对EF说“ 嘿,这是PK专栏,但这种关系没有使用它,它基于这两列 ”。
这可能吗?
希望有意义!
答案 0 :(得分:2)
这是不可能的。 EF只能创建遵循数据库规则的关系。从属方面的FK必须包含主要方面的PK的所有部分。
一般规则:EF fluent API无法使用PK,FK关系定义您无法在数据库中定义的任何关系。