c# - Entity Framework 6 - 导航属性的主键

标签 c# entity-framework

通过 Entity Framework 6.1.3 使用 Code First 方法,我尝试基于 this post 创建和配置我自己的多对多表.我强烈同意他的观点:我不想遵循惯例,因为那会限制我的设计。

看多对多with payload Code First 中的类:

public class FooBar
{
    [Key, Column(Order = 1)]
    public virtual Foo Foo { get; set; }

    [Key, Column(Order = 2)]
    public virtual Bar Bar { get; set; }

    //some more 'payload' properties
}

我想保持这种方式而不添加标量属性。所以我不想在我的模型中使用这些属性:

public int FooId { get; set; }
public int BarId { get; set; }

我的问题是特别是在 Entity Framework 6 中是否可以将这样的导航属性作为(复合)键? Most answers这个问题是基于 Entity Framework 的早期版本,当时是不可能的。那么问题来了,现在可以吗?

this answer提到:

You need to setup your classes in a specific way so that EF recognises what your trying to achieve.

但我仍然不清楚这在技术上是否可行。如果是,有人可以提供有关如何实现此目标的代码示例吗?

最佳答案

不能那样做

不仅在 EF 6.X 中,而且在 EF Core 中也是不可能的。这是设计使然。如果您不在联结表上定义这些标量属性,EF 将不知道如何映射这些关系。我不得不再次说,这是设计使然。不幸的是,您在这里没有任何其他选择。您必须在联结表中包含这些标量属性。

关于c# - Entity Framework 6 - 导航属性的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709766/

相关文章:

c# - 将存储过程结果转换为模型对象

entity-framework - 如何使用Entity Framework 4从父集合中删除子实体?

c# - InvalidOperationException - 执行命令时,参数必须完全是数据库参数或值

c# - 我如何处理具有组合的对象

linq - IQueryable 到 IQueryable<T>

c# - 避免数据库调用以减少内存

entity-framework - 回滚事务抛出 "There is already an open DataReader associated with this Command..."错误

c# - Windows 服务中的 Debug.WriteLine 到 OutputDebugString

c# - 使用 sql 数据库部署 wpf 应用程序

c# - 检查用 Split() 创建的数组是否为空 C#