C# 如何在EF代码中首先指定不';t映射到PKs

C# 如何在EF代码中首先指定不';t映射到PKs,c#,entity-framework,entity-framework-4.1,ef-code-first,C#,Entity Framework,Entity Framework 4.1,Ef Code First,但我的问题措辞不好 我试图指定两个类之间的关系,这不是一个简单的FK映射-这是一个预先存在的数据库,不是我将从EF生成的 这是两个对象的简化视图: public class WidgetDetails { [Key] public int WidgetId { get; set; } public int WidgetNumber {get; set;} // Some other props here.. [ForeignKey("WidgetI

但我的问题措辞不好

我试图指定两个类之间的关系,这不是一个简单的FK映射-这是一个预先存在的数据库,不是我将从EF生成的

这是两个对象的简化视图:

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.widgetpropd中删除[KEY]属性时,这才有效-因为在EF中,关系是使用键映射的

我想对EF说的是“嘿,这是PK列,但这个关系没有使用它,它是基于这两列的。”

这可能吗


希望这有意义

这是不可能的。EF只能创建遵循数据库规则的关系。从属侧的FK必须包含主侧PK的所有部分


一般规则:EF fluent API无法定义任何不能使用PK、FK关系在数据库中定义的关系。

看来我唯一可以这样做的方法是添加表示关系的属性并从数据库中获取相关数据。谢谢你的澄清!