繁体   English   中英

首先使用实体​​框架代码-如何定义自定义导航属性

[英]Entity Framework code first - How to define a custom navigation property

我正在使用ASP.NET核心和实体框架

我有一个预先存在的数据库架构,我想使用一个外键添加一个链接表,但是外键索引列并不符合任何标准EF约定。 我该如何在Ef中表达这一点? 如果可能的话,我宁愿使用Data Annotation属性,但如果没有,最好使用ModelBuilder fluent API。

本质上是这样的:

[Table("widgets")]
class Widget {
  [Key, Column("id")]
  int Id { get; set; }

  [Column("referencenumber")]
  int ReferenceNumber { get; set; }

  public WidgetReferenceData ReferenceData // ???? How do I express this?
}

[Table("widgetreferences")]
class WidgetReference {
  [Key, Column("referencenumber")]
  int ReferenceNumber { get; set; }

  [Column("value")]      
  string Value { get;set; }
}

在上述模型中,在WidgetReference表中,一个Widget可能具有零个或一个相关条目,并使用widgets.referencenumber数据库列进行链接。

我想做的是向我的Widget模型中添加一个属性,以加载此关联的WidgetReference(如果不存在,则为null)。 基本上,我希望能够像这样使用它:

var referenceValue = FindWidget().ReferenceData?.Value;

如果它是常规的“ Id”列,则EF会处理它,但是由于我具有自定义数据库列和属性名,该如何表达这种关系?

我不确定它是否会影响结果,但至关重要的是, widgetreferences.referencenumber不是外键,而只是带有索引的列。 我们的业务逻辑是,如果删除了某个小部件,我们仍然希望保留参考数据

我试图通过谷歌搜索找不到答案,但是感觉有些不难:-(

    [Table("widgets")]
    class Widget 
   {
      [Key, Column("id")]
      int Id { get; set; }

      [Column("referencenumber")]
      int? ReferenceNumber { get; set; }

      [ForeignKey("ReferenceNumber")]
      public virtual WidgetReferenceData ReferenceData // ???? How do I express this?
    }

    [Table("widgetreferences")]
    class WidgetReference 
    {
      [Key, Column("referencenumber")]
      int ReferenceNumber { get; set; }

      [Column("value")]      
      string Value { get;set; }
    }

只需使用ForeignKeyAttribute将Navigation属性与Foreign Key属性相关联即可。 EF不在乎后端中是否确实有外键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM