zoukankan      html  css  js  c++  java
  • 笔记-隐藏属性与术语约定

    隐藏属性
    隐藏属性是指:在实体类中未定义,但在数据库中有字段定义。
    Data Annotations
    不支持通过数据注解的方式配置隐藏属性。
    Fluent API
    modelBuilder.Entity<Blog>().Property<DateTime>("LastUpdated");
    赋值与查询
    context.Entry(myBlog).Property("LastUpdated").CurrentValue = DateTime.Now;
    var blogs = context.Blogs.OrderBy(b => EF.Property<DateTime>(b, "LastUpdated"));
    数据库实体关系
    关系定义了两个实体之间的关联, 在关系数据库中,通过外键约束。
    主要关系:一对多,一对一和多对多
    相关术语:依赖实体、主体实体、外键、主键、导航属性(集合导航,引用导航,反转导航)
    例如:Blog 和 Post 就是一对多关系,Post 是依赖实体,Blog 是主体实体, Post.BlogId 是外键,Blog.BlogId 是主体键,Post.Blog 是引用导航属性,Blog.Posts 是一个集合导航属性,Post.Blog 是 Blog.Posts 的反转导航属性。
    按照约定,当发现类型上有导航属性时,将创建关系。 如果属性指向的类型不能由当 前的数据库提供程序映射为标量类型,则该属性视为一个导航属性。
    约定

    完全定义的关系
    如果两个类型之间找到一对导航属性,则它们将被配置为同一关系的反转导航属性。
    如果依赖实体属性包含名为<primary key property name>, <navigation property name><primary key property name>或<principal entity name><primary key property name>的属性,该属性将配置为外键。
    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; } }
    没有外键属性
    微软建议定义外键属性,但有时候确实不需要,将自动生成名为 <navigation property name><principal key property name> 的隐藏属性。
    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; }
    }
    单一导航属性
    没有反导航属性和外键属性,通过约定定义一个关系。
    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 BlogForeignKey { get; set; }
    [ForeignKey("BlogForeignKey")] public Blog Blog { get; set; }
    外键指定(Fluent API)
    odelBuilder.Entity<Post>() .HasOne(p => p.Blog) .WithMany(b => b.Posts) .HasForeignKey(p => p.BlogForeignKey);

  • 相关阅读:
    12
    Kafka设计解析(二)- Kafka High Availability (上)
    Apache kafka 工作原理介绍
    Kafka设计解析(一)- Kafka背景及架构介绍
    【转载】MySQL之权限管理
    【转载】漫谈HADOOP HDFS BALANCER
    【转载】HDFS 上传文件不均衡和Balancer太慢的问题
    【转载】mysql binlog日志自动清理及手动删除
    【转】Typora极简教程
    更新Linux服务器时间
  • 原文地址:https://www.cnblogs.com/qingfenglin/p/13527814.html
Copyright © 2011-2022 走看看