EF Core 數據庫實體關系外鍵的配置


一、EF Core 默認約定的導航屬性

1、如果兩個類型之間找到一對導航屬性,則它們將被配置為同一關系的反轉導航屬性。

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

2.依賴實體(多端的實體)包含名稱與其中一種模式相匹配的屬性,則該屬性將被配置為外鍵: 

a.依賴主體設置:導航屬性、外鍵屬性(導航屬性名+主體主鍵名) 

public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
  public class Post
  {
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogModelBlogId { get; set; }
    public Blog BlogModel { get; set; }
  }

a.依賴主體設置:導航屬性、外鍵屬性(導航屬性名+Id) 

public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
  public class Post
  {
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogModelBlogId { get; set; }
    public Blog BlogModel { get; set; }
  }

c.依賴主體設置:導航屬性、外鍵屬性(主體類型名+主體主鍵名)

public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
  public class Post
  {
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogBlogId { get; set; }
    public Blog BlogModel { get; set; }
  }

d.依賴主體設置:導航屬性、外鍵屬性(主體類型名+Id)

public class Blog
    {     [Key]
        public int BId { get; set; }
        public string Url { get; set; }
    }
  public class Post
  {
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    public Blog BlogModel { get; set; }
  }

3.無外鍵屬性:如果未找到外鍵屬性,則會引入名稱為 <navigation property name><principal key property name> 或 <principal entity name><principal key property name> 在此示例中,隱藏外鍵是 BlogId 

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public Blog Blog { get; set; }
}

4.只包含一個導航屬性(無反向導航,沒有外鍵屬性)就足以具有約定定義的關系。 還可以有一個導航屬性和一個外鍵屬性

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
}

5.手動設置

a.數據注解方式

public int BlogForeignKey { get; set; } 

[ForeignKey("BlogForeignKey")]  //設置外鍵
public Blog Blog { get; set; }

b.Fluent API 方式

odelBuilder.Entity<Post>().HasOne(p => p.Blog).WithMany(b => 
b.Posts).HasForeignKey(p => p.BlogForeignKey);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM