一、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);

 

相关文章:

  • 2021-07-29
  • 2022-12-23
  • 2020-05-15
  • 2021-08-01
  • 2021-09-02
  • 2021-11-02
  • 2019-02-21
  • 2021-12-11
猜你喜欢
  • 2022-12-23
  • 2019-02-18
  • 2022-12-23
  • 2019-11-05
  • 2021-12-17
  • 2022-12-23
  • 2021-09-27
相关资源
相似解决方案