簡體   English   中英

在EF核心中建立外鍵關系

[英]Setting up a foreign key relationship in EF core

所以我有兩個模型。 MovieModel和MovieQueryModel。 每部電影都有相應的電影查詢。 但電影查詢並不總是有相關的電影。

因此,在我的數據庫中,我希望電影表中的一列具有對相應電影查詢的引用。 但是我的電影查詢表中不需要引用電影的列。

我原本以為這是一對一的外鍵關系,但我開始懷疑這一點。 似乎在EF中一對一的外鍵關系中,我需要在兩個模型中都引用另一個模型。

看起來我可以從MovieQueryModel引用MovieModel,只是為沒有匹配的查詢設置為null但我不想這樣做。 好像有更好的方法。

這是一對一的關系嗎? 如果不是,這是一種什么樣的關系?如何在EF Core中設置我的模型以支持這種行為? 我的模特在下面。

MovieQueryModel.cs

namespace imdb_data_retrieval.Models
{
    public class MovieQueryModel
    {
        public MovieQueryModel(string queryTitle, string queryReleaseYear, string result){
            id = Guid.NewGuid();
            QueryTitle = queryTitle;
            QueryReleaseYear = queryReleaseYear;
            Result = result;
            QueryDate = DateTime.Now;
        }

        [Key]
        public Guid Id { get; set; }
        [Required]
        public string QueryTitle { get; set; }
        [Required]
        public string QueryReleaseYear { get; set; }
        public string Result { get; set; }
        public DateTime QueryDate { get; set; }
    }
}

MovieModel.cs

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using MediatR;

namespace imdb_data_retrieval.Models
{
    public class MovieModel
    {
        public MovieModel(string title, int releaseYear){
            id = Guid.NewGuid();
            Title = title;
            ReleaseYear = releaseYear;
            ImdbId = null;
            QueryDate = DateTime.Now;
        }
        [Key]
        public Guid id { get; set; }
        [ForeignKey("MovieQuery")]
        public Guid RelatedQuery { get; set; }
        public string Title { get; set; }
        public int ReleaseYear { get; set; }
        public string ImdbId { get; set; }
        public DateTime QueryDate { get; set; }
    }
}

是的,這很可能是零一對一的關系。

您要做的就是在MovieModel上引用MovieQueryModelId(以及xyzModel的含義,只使用Moive不帶后綴)。

像這樣:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using MediatR;

namespace imdb_data_retrieval.Models
{
    public class MovieModel
    {
        public MovieModel(string title, int releaseYear){
            id = Guid.NewGuid();
            Title = title;
            ReleaseYear = releaseYear;
            ImdbId = null;
            QueryDate = DateTime.Now;
        }
        [Key]
        public Guid id { get; set; }
        [ForeignKey("MovieQuery")] //<-- remove this (EF automatically does it at the relationship stuff)
        public Guid RelatedQuery { get; set; } // <-- remove this
        public string Title { get; set; }
        public int ReleaseYear { get; set; }
        public string ImdbId { get; set; }
        public DateTime QueryDate { get; set; }

        //relationship stuff
        public MovieQueryModel MovieQueryModel {get; set;}
        public Guid? MovieQueryModel {get; set;}
    }
}

添加遷移時,EF會根據模型自動綁定表。 這樣每個Movie都會有零個或一個MovieQuery,而MovieQuery根據您的請求不需要任何額外的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM