zoukankan      html  css  js  c++  java
  • Ef core 如何设置主键

      在正题之前,先说明几个问题。

      (1)写 sql 不好吗,为什么要引入 ORM ?

      总的来说由于需求的复杂性增加,引入了面向对象编程,进而有了 ORM ,ORM 使得开发人员以对象的方式表达业务逻辑。对于有些类 sqlHelper 的 ORM 也不能说好还是不好,可能需求不同吧。

      (2)实体 Entity 为什么要有主键?

      这个是由实体的定义决定的,可标识的对象称之为实体。

      (3)主键的类型有哪些?

      基本可以分为两类:数值型:int、long;字符串类型:guid 或其他。

      主键是数据库对列的约束,具有唯一、非空、不可变的性质。主键的值可以是数据库自增,也可以是程序中设置。

      (4)如何选择主键的类型?

      主键对于数据库的影响主要是:产生的索引的大小、维护数据的成本(可以理解为插入、更新、查找数据的速度)。数值型类型性能优于字符串类型,数值类型的长度小于字符串类型,所以其表达的范围小于字符串。

      Retrieve entity id Before call savechanges?(在调用 savechanges 方法前获取实体 id 的值?)

      如果选择 guid,那么可以在程序中直接生成 guid 的值。如果选择 int 类型,则分以下几种情况:

    1 导航属性

           var contxt = new BloggingContext();

                var blog = new Blog()

                {

                    Url = "www",

                    Rating = 2

                };

                contxt.Blogs.Add(blog);

                var post = new Post() { Blog = blog, Title = "t", Content = "c" };

                contxt.Posts.Add(post);

                contxt.SaveChanges();

    2 HiLo (仅SqlServer支持)

            using (var db = new BloggingContext())

                {

                    var blog = new Blog { Url = "http://sample.com" };

                    db.Blogs.Add(blog);

                    Console.WriteLine(blog.BlogId);

                    db.SaveChanges();

                }

    3 transaction

      var contxt = new BloggingContext();

                using (var transaction = await contxt.BeginTransactionAsync())

                {

                    var blog = new Blog()

                    {

                        Url = "www",

                        Rating = 2

                    };

                    contxt.Blogs.Add(blog);

                    contxt.SaveChanges();

                    var blog2 = new Blog()

                    {

                        Url = "www" + blog.BlogId,

                        Rating = 2

                    };

                    contxt.Blogs.Add(blog2);

                    contxt.SaveChanges();

                    await transaction.CommitAsync();

                }

    参考:

    https://docs.microsoft.com/en-us/dotnet/architecture/microservices/

    https://vladmihalcea.com/database-primary-key-flavors/

  • 相关阅读:
    【CF446D】DZY Loves Games 高斯消元+矩阵乘法
    【CF542D】Superhero's Job 暴力
    【CF660E】Different Subsets For All Tuples 结论题
    【CF666C】Codeword 结论题+暴力
    【CF666E】Forensic Examination 广义后缀自动机+倍增+线段树合并
    【CF461E】Appleman and a Game 倍增floyd
    【CF471E】MUH and Lots and Lots of Segments 扫描线+并查集+线段树+set
    【CF480D】Parcels DP
    【CF497E】Subsequences Return 矩阵乘法
    SSAS 项目部署失败的问题
  • 原文地址:https://www.cnblogs.com/850391642c/p/efcore-primarykey.html
Copyright © 2011-2022 走看看