簡體   English   中英

Entity Framework 實體如何設置 ID 和外鍵約束?

[英]Entity Framework entity how to set ID and foreign key constraint?

我有一些從數據庫優先的數據庫生成的實體框架 6 實體。 它們看起來類似於下面的代碼。

請注意,有一個CustomerID和一個Customer字段,其中Customer字段來自FK_Contact_Customer

在 C# 中處理此實體的實例時,我應該設置CustomerID還是Customer 一旦我設置了一個屬性,我如何使另一個保持一致? 這是一個手動過程嗎? 是否有實體框架助手?

例如,如果我有一個 Contact 實體的實例和一個Customer實體的實例,那么將Contact.Customer關聯到Customer實例的正確方法是什么? 我希望在完成此操作后, CustomerIDCustomer屬性都將與關聯一致。

注意:這可能是一個重復的問題,我進行了搜索,但找不到這個(基本)問題的答案。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProject.DAL.Context
{
    using System;
    using System.Collections.Generic;

    public partial class Contact
    {
        public int ID { get; set; }
        public int CustomerID { get; set; }
        public string Contact1 { get; set; }
        public string Email { get; set; }
        public string ContactTitle { get; set; }

        /// <summary>
        /// FK_Contact_Customer
        /// </summary>
        public virtual Customer Customer { get; set; }
    }
}

您應該注釋 Customer 屬性,使其看起來像這樣。

[ForeignKey("CustomerID")]
public virtual Customer Customer { get; set; }

如果您使用外鍵屬性,則不必手動設置 CustomerID 屬性。

或者您可以使用帶有遷移的 FluetAPI 將您的實體映射到數據庫

讓我們創建一個名為 ContactConfig 的類,該類將創建該實體的所有關系。

public class ContactConfig: EntityTypeConfiguration<Contact>
 {
    public ContactConfig()
    {

        HasKey(c => c.ID);

        Property(c => c.Contact1 )
            .IsRequired();

        Property(c => c.Email )
            .IsRequired();

        Property(c => c.ContactTitle )
            .IsRequired();

        //Here is the secret
        HasRequired(c => c.Costumer)
            .WithMany(c => c.Contact)
            .HasForeignKey(c => c.CustomerID);
  }
}

CostumerID 只是一個導航屬性,將是 Costumer 類的外鍵。 您必須將 Costumer 類的 ID 與 Contact 類中的 CostumerID 屬性相關聯。

使用此設置,您只需在需要將客戶與聯系人關聯時調用 CostumerID 屬性

之后,只需在包管理器控制台中鍵入 Update-Database。

我假設您正在嘗試創建一個與現有客戶相關的新聯系人,在這種情況下,您將填充 Contact.CustomerID 並將 Contact.Customer 保留為空。 Contact.CustomerID 是 Customer 實體的外鍵。 Contact.Customer 是從 Contact 到 Customer 的導航屬性,您將在讀取數據時使用它,因此訪問 Contact.Customer 將為您提供相關的 Customer 實體。

我不確定創建填充了客戶的聯系人的含義,它可能會導致更新客戶實體,或者如果未填充客戶 ID,它可能會創建一個新的客戶記錄以創建並與聯系人相關。 這不是我會采用的方法,它可能需要配置。

暫無
暫無

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

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