[英]How to define a navigation property via Entity Framework code first approach
[英]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.