Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Entity Framework 4.1 Fluent API在非主键字段上创建关联_C#_Entity Framework_Foreign Keys_Primary Key_Entity Framework 4.1 - Fatal编程技术网

C# 使用Entity Framework 4.1 Fluent API在非主键字段上创建关联

C# 使用Entity Framework 4.1 Fluent API在非主键字段上创建关联,c#,entity-framework,foreign-keys,primary-key,entity-framework-4.1,C#,Entity Framework,Foreign Keys,Primary Key,Entity Framework 4.1,我们使用EF4.1和fluent API从遗留数据库获取数据(不允许更改)。在相关列不是主键和外键的两个表之间创建关系时遇到问题 对于下面的类,我们如何配置Report和RunStat之间的一对多关系,以便Report.RunStats返回所有RunStat实体,其中ReportCode字段相等 public class Report { [Key] public int ReportKey { get; set; } public string Name { get;

我们使用EF4.1和fluent API从遗留数据库获取数据(不允许更改)。在相关列不是主键和外键的两个表之间创建关系时遇到问题

对于下面的类,我们如何配置
Report
RunStat
之间的一对多关系,以便
Report.RunStats
返回所有
RunStat
实体,其中
ReportCode
字段相等

public class Report
{
    [Key]
    public int ReportKey { get; set; }
    public string Name { get; set; }
    public int ReportCode { get; set; } // Can we associate on this field?
    public virtual ICollection<RunStat> RunStats { get; set; }
}

public class RunStat
{
    [Key]
    public int RunStatKey { get; set; }
    public int ReportCode { get; set; }
    public DateTime RunDate { get; set; }
}
公共类报告
{
[关键]
public int ReportKey{get;set;}
公共字符串名称{get;set;}
public int ReportCode{get;set;}//我们可以在这个字段上关联吗?
公共虚拟ICollection RunStats{get;set;}
}
公共类RunStat
{
[关键]
public int RunStatKey{get;set;}
公共int报告代码{get;set;}
公共日期时间运行日期{get;set;}
}

基本上,我想使用Fluent API来配置EF,以便它将
Report.ReportCode
视为外键,将
RunStat.ReportCode
视为主键。

这是不可能的。EF中的关系遵循与数据库中完全相同的规则。这意味着主体表必须具有唯一标识符,该标识符由依赖表引用。对于数据库,标识符可以是主键,也可以是主表的唯一列。否则它是无效关系


实体框架不支持唯一键。如果您想在
Report
RunStat
之间建立一对多关系,则依赖表(
RunStat
)必须包含值为
Report.ReportKey
的列。没有其他方法可以使其自动-否则,您必须简单地将其设置为自定义属性,并在需要时从实体框架手动填充。

此功能现在可以在EF Core 1.0(EF7)中实现,如2014年7月16日提供给a的参考中所示

因此,如果这些信息在引用页面上消失,这些有价值的信息不会丢失,以下是功能请求的文本:

唯一约束(即候选密钥)支持
(Kati Iceva于2010年9月10日发布)

SQL Server和其他数据库支持表上的唯一约束。 外键约束通常基于上的唯一约束 主端,主键只是 唯一的约束。实体框架目前仅支持 基于主键的引用约束,并且没有 唯一约束的概念。我们的想法是:

  • 支持在实体上指定唯一约束
  • 支持指定外键关联,该外键关联在主端指定包含唯一约束的列,但 不是主键
以及微软宣布在EF Core 1.0中实施此功能:

已完成
(Diego Vega(微软实体框架项目经理)于2016年8月9日发布)

EF Core 1.0中添加了对该功能的关闭支持,我们 没有计划将其添加到EF6代码库中。另外,请创建 针对该功能的具体改进提出了新的想法


投票将其添加为实体框架中的新功能,您现在可以指定