永久免费看黄A片无码软件,japanese 在线观看国产,强奷高H猛烈失禁潮喷播放,亚洲成精品自拍

rexian

咨詢電話:023-6276-4481

熱門文章

聯(lián)系方式

電 話:023-6276-4481

郵箱:broiling@qq.com

地址:重慶市南岸區(qū)亞太商谷6幢25-2

當(dāng)前位置:網(wǎng)站首頁 > 技術(shù)文章 > 流利的 API-關(guān)系

流利的 API-關(guān)系

編輯:Ethan 發(fā)表時(shí)間:2017-07-24 12:40:38
Ethan

使用 Fluent API 配置關(guān)系

注意: 此頁提供了有關(guān)如何設(shè)置您使用 fluent API 的代碼第一個(gè)模型中的關(guān)系信息。有關(guān)在關(guān)系的一般信息Ef和如何訪問和操作數(shù)據(jù)使用關(guān)系,請(qǐng)參閱關(guān)系和導(dǎo)航屬性。

當(dāng)使用代碼第一次,你Efine 您的模型由 dEf入會(huì)須知域 CLR 類。由 dEf行兇,實(shí)體框架使用代碼第一次約定,您的類映射到的數(shù)據(jù)庫架構(gòu)。如果您使用的代碼第一次的命名約定,在大多數(shù)情況下,你可以依靠代碼第一次設(shè)置你的表之間的關(guān)系基礎(chǔ)的外鍵和導(dǎo)航屬性你 d Ef ine 的類。如果你不遵守公約 》 時(shí) dEf入會(huì)須知您的類,或者如果您想要更改公約 》 的工作的方式,你可以使用流利的 API 或數(shù)據(jù)注釋來配置您的類,因此代碼第一次可以映射您的表之間的關(guān)系。

 

內(nèi)容

  • 介紹

  • 配置要求-到-可選的關(guān)系 (–零-或-一對(duì)一)

  • 配置在兩端都需要 (一對(duì)一) 的關(guān)系

  • 配置多對(duì)多關(guān)系

  • 與一個(gè)導(dǎo)航屬性配置的關(guān)系

  • 啟用級(jí)聯(lián)刪除

  • 配置一個(gè)復(fù)合的外鍵

  • 重命名一個(gè)外國(guó)的關(guān)鍵就是不 DEf模型中的氫離子濃度

  • 配置不遵循代碼的第一個(gè)公約的外鍵名稱

  • 在示例中使用的模型

 

介紹

當(dāng)使用 fluent API 配置關(guān)系,你與 EntityTypeConfiguration 實(shí)例啟動(dòng),然后使用 HasRequired、 HasOptional 或以很多種方法指定此實(shí)體參與的關(guān)系的類型。HasRequired 和 HasOptional 的方法采用 lambda 表達(dá)式來表示 rEf電池導(dǎo)航屬性。有許多方法,采用 lambda 表達(dá)式來表示集合導(dǎo)航屬性。然后可以通過使用 WithRequired,5000-15000 瓶和許多的方法來配置逆導(dǎo)航屬性。這些方法有的重載,不帶參數(shù),可以用于指定基數(shù)與單向?qū)Ш健?/p>

然后可以通過使用 HasForeignKey 方法來配置外鍵屬性。此方法將 lambda 表達(dá)式表示要用作外鍵的屬性。

 

配置要求-到-可選的關(guān)系 (–零-或-一對(duì)一)

下面的示例配置一個(gè)到零或一個(gè)關(guān)系。OfficeAssignment 已經(jīng)是主鍵和外鍵,InstructorID 屬性,因?yàn)閷傩缘拿Q不符合公約 》 的 HasKey 方法用于配置的主鍵。

// Configure the primary key for the OfficeAssignment
modelBuilder.Entity<OfficeAssignment>()
    .HasKey(t => t.InstructorID);

// Map one-to-zero or one relationship
modelBuilder.Entity<OfficeAssignment>()
    .HasRequired(t => t.Instructor)
    .WithOptional(t => t.OfficeAssignment);

 

配置在兩端都需要 (一對(duì)一) 的關(guān)系

在大多數(shù)情況下實(shí)體框架可以推斷出哪種類型是依賴,哪些是在關(guān)系中的主體。然而,當(dāng)兩端的關(guān)系需要或雙方都可選實(shí)體框架無法識(shí)別的依賴和校長(zhǎng)。當(dāng)要求兩端的關(guān)系時(shí),在 HasRequired 方法之后使用 WithRequiredPrincipal 或 WithRequiredDependent。當(dāng)兩端的關(guān)系是可選的時(shí)在 HasOptional 方法之后使用 WithOptionalPrincipal 或 WithOptionalDependent。

// Configure the primary key for the OfficeAssignment
modelBuilder.Entity<OfficeAssignment>()
    .HasKey(t => t.InstructorID);

modelBuilder.Entity<Instructor>()
    .HasRequired(t => t.OfficeAssignment)
    .WithRequiredPrincipal(t => t.Instructor);

 

配置多對(duì)多關(guān)系

下面的代碼配置課程和教師的類型之間的多對(duì)多關(guān)系。在以下示例中,dEf奧爾代碼第一次約定被用來創(chuàng)建一個(gè)聯(lián)接表。結(jié)果與 Course_CourseID 和 Instructor_InstructorID 的列創(chuàng)建 CourseInstructor 表。

modelBuilder.Entity<Course>()
    .HasMany(t => t.Instructors)
    .WithMany(t => t.Courses)

 

如果你想要在你需要做額外的配置通過使用地圖方法表中指定的聯(lián)接表名稱和列的名稱。下面的代碼生成 CourseID 和 InstructorID 列的 CourseInstructor 表。

modelBuilder.Entity<Course>()
    .HasMany(t => t.Instructors)
    .WithMany(t => t.Courses)
    .Map(m =>
    {
        m.ToTable("CourseInstructor");
        m.MapL Ef tKey("CourseID");
        m.MapRightKey("InstructorID");
    });

 

與一個(gè)導(dǎo)航屬性配置的關(guān)系

(也稱為單向) 單向關(guān)系是一個(gè)導(dǎo)航屬性時(shí) dEf董事關(guān)系結(jié)束只有一個(gè)而不是兩個(gè)。按照約定,代碼第一總是將解釋作為一到多的單向關(guān)系。例如,如果你想要一對(duì)一的關(guān)系,教師和 OfficeAssignment,在那里你有導(dǎo)航屬性只是教練的類型,你需要使用 fluent API 來配置這種關(guān)系。

// Configure the primary Key for the OfficeAssignment
modelBuilder.Entity<OfficeAssignment>()
    .HasKey(t => t.InstructorID);

modelBuilder.Entity<Instructor>()
    .HasRequired(t => t.OfficeAssignment)
    .WithRequiredPrincipal();

 

啟用級(jí)聯(lián)刪除

通過使用 WillCascadeOnDelete 方法,可以在關(guān)系上配置級(jí)聯(lián)刪除。如果外鍵中的相關(guān)實(shí)體不是可以為 null 的然后代碼第一次設(shè)置級(jí)聯(lián)刪除的關(guān)系。如果依賴實(shí)體上的外鍵是可以為 null,代碼第一次不設(shè)置級(jí)聯(lián)刪除的關(guān)系,當(dāng)刪除主外鍵將被設(shè)置為 null。

您可以通過使用刪除這些級(jí)聯(lián)刪除公約:

modelBuilder.Conventions.Remove < O Net oManyCascadeDeleteConvention >)
modelBuilder.Conventions.Remove < ManyToManyCascadeDeleteConvention >)

下面的代碼配置需要的關(guān)系,然后禁用層疊刪除。

modelBuilder.Entity<Course>()
    .HasRequired(t => t.Department)
    .WithMany(t => t.Courses)
    .HasForeignKey(d => d.DepartmentID)
    .WillCascadeOnDelete(false);

 

配置一個(gè)復(fù)合的外鍵

如果主鍵部類型包括 DepartmentID 和名稱屬性,則應(yīng)如下部和課程類型的外鍵配置主鍵:

// Composite primary key
modelBuilder.Entity<Department>()
.HasKey(d => new { d.DepartmentID, d.Name });

// Composite foreign key
modelBuilder.Entity<Course>() 
    .HasRequired(c => c.Department) 
    .WithMany(d => d.Courses)
    .HasForeignKey(d => new { d.DepartmentID, d.DepartmentName });

 

重命名一個(gè)外國(guó)的關(guān)鍵就是不 DEf模型中的氫離子濃度

如果你選擇不到 d Ef ine CLR 類型,但想要指定它起什么名字外的鍵應(yīng)該在數(shù)據(jù)庫中,執(zhí)行下列操作:

modelBuilder.Entity<Course>()
    .HasRequired(c => c.Department)
    .WithMany(t => t.Courses)
    .Map(m => m.MapKey("ChangedDepartmentID"));

 

配置不遵循代碼的第一個(gè)公約的外鍵名稱

如果外鍵屬性的課程類上調(diào)用了而不是 DepartmentID SomeDepartmentID,您將需要執(zhí)行下列操作來指定您想要 SomeDepartmentID 是外鍵:

modelBuilder.Entity<Course>()
         .HasRequired(c => c.Department)
         .WithMany(d => d.Courses)
         .HasForeignKey(c => c.SomeDepartmentID);

 

在示例中使用的模型

下面的代碼第一個(gè)模型用于此頁面上樣本。

using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
// add a r Ef erence to System.ComponentModel.DataAnnotations DLL
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using System;

public class SchoolEntities : DbContext
{
    public DbSet<Course> Courses { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Instructor> Instructors { get; set; }
    public DbSet<OfficeAssignment> OfficeAssignments { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Configure Code First to ignore PluralizingTableName convention
        // If you keep this convention then the generated tables will have pluralized names.
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

public class Department
{
    public Department()
    {
        this.Courses = new HashSet<Course>();
    }
    // Primary key
    public int DepartmentID { get; set; }
    public string Name { get; set; }
    public decimal Budget { get; set; }
    public System.DateTime StartDate { get; set; }
    public int? Administrator { get; set; }

    // Navigation property
    public virtual ICollection<Course> Courses { get; private set; }
}

public class Course
{
    public Course()
    {
        this.Instructors = new HashSet<Instructor>();
    }
    // Primary key
    public int CourseID { get; set; }

    public string Title { get; set; }
    public int Credits { get; set; }

    // Foreign key
    public int DepartmentID { get; set; }

    // Navigation properties
    public virtual Department Department { get; set; }
    public virtual ICollection<Instructor> Instructors { get; private set; }
}

public partial class OnlineCourse : Course
{
    public string URL { get; set; }
}

public partial class OnsiteCourse : Course
{
    public OnsiteCourse()
    {
        Details = new Details();
    }

    public Details Details { get; set; }
}

public class Details
{
    public System.DateTime Time { get; set; }
    public string Location { get; set; }
    public string Days { get; set; }
}
    
public class Instructor
{
    public Instructor()
    {
        this.Courses = new List<Course>();
    }

    // Primary key
    public int InstructorID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public System.DateTime HireDate { get; set; }

    // Navigation properties
    public virtual ICollection<Course> Courses { get; private set; }
}

public class OfficeAssignment
{
    // Specifying InstructorID as a primary
    [Key()]
    public Int32 InstructorID { get; set; }

    public string Location { get; set; }

    // When the Entity Framework sees Timestamp attribute
    // it configures ConcurrencyCheck and DatabaseGeneratedPattern=Computed.
    [Timestamp]
    public Byte[] Timestamp { get; set; }

    // Navigation property
    public virtual Instructor Instructor { get; set; }
}