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/

 


免責聲明!

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



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