天天看點

SqlServer一多一、一對多、多對多關系的設定

最近使用EF Core,使用的是DB First的模式。通過對資料表進行主外鍵的設定,實作實體類之間一對一、一對多、多對多的等關系模型。以下是Main、Main_Ext、Children三個表,

Main

kid name value note

Main_Ext

mid num

Children

kid pid text note isDelete

1、一對一關系設定:設定Main表的kid列為主鍵,設定Main_Ext表的mid列為主鍵,同時将它設定為外鍵,關聯Main表的kid列。如下圖所示:

SqlServer一多一、一對多、多對多關系的設定

則用EF Core生成的代碼如下所示,Main和Main_Ext之間存在一對一的關系。

public partial class Main
    {
        public Main()
        {
            Children = new HashSet<Children>();
        }

        public Guid Kid { get; set; }
        public string Name { get; set; }
        public string Value { get; set; }
        public string Note { get; set; }

        public virtual MainExt MainExt { get; set; }
    }

    public partial class MainExt
    {
        public Guid Mid { get; set; }
        public int? Num { get; set; }

        public virtual Main M { get; set; }
    }
           

2、一對多的關系設定:設定Main表的kid列為主鍵,設定Children表的kid列為主鍵,同時設定pid列為外鍵,關聯Main表的kid列。用EF Core生成的代碼如下所示,Main和Children之間存在一對多的關系。

public partial class Main
    {
        public Main()
        {
            Children = new HashSet<Children>();
        }

        public Guid Kid { get; set; }
        public string Name { get; set; }
        public string Value { get; set; }
        public string Note { get; set; }

        public virtual ICollection<Children> Children { get; set; }
    }

    public partial class Children
    {
        public Guid Kid { get; set; }
        public Guid Pid { get; set; }
        public string Text { get; set; }
        public string Note { get; set; }
        public bool IsDeleted { get; set; }

        public virtual Main P { get; set; }
    }
           

3、多對多的關系設定:設定Main表的kid為主鍵,同時為Main表增加cid的字段,并設定為外鍵,關聯Children表的kid列。設定Children表的kid列為主鍵,同時設定pid列為外鍵,關聯Main表的kid列。用EF Core生成,Main和Children之間存在多對多的關系。

最後:表和表之間存在關系之後,就不能輕易删資料了。是以可以給每個表增加IsDeleted字段,對資料進行軟删除即可。