溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linq如何定義實體繼承

發(fā)布時間:2021-12-02 09:40:44 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Linq如何定義實體繼承的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Linq實體繼承的定義

Linq to sql支持實體的單表繼承,也就是基類和派生類都存儲在一個表中。對于論壇來說,帖子有兩種,一種是主題貼,一種是回復帖。那么,我們就先定義帖子基類:

  1. [Table(Name = "Topics")]  

  2. public class Topic  

  3. {  

  4. [Column(Name = "TopicID"DbType = "int identity"IsPrimaryKey = true
    IsDbGenerated = trueCanBeNull = false)]  

  5. public int TopicID { get; set; }  

  6. [Column(Name = "TopicType"DbType = "tinyint"CanBeNull = false)]  

  7. public int TopicType { get; set; }  

  8. [Column(Name = "TopicTitle"DbType = "varchar(50)"CanBeNull = false)]  

  9. public string TopicTitle { get; set; }  

  10. [Column(Name = "TopicContent"DbType = "varchar(max)"CanBeNull = false)]  

  11. public string TopicContent { get; set; }  

這些Linq實體繼承的定義大家應該很熟悉了。下面,我們再來定義兩個Linq實體繼承帖子基類,分別是主題貼和回復貼:

public class NewTopic : Topic  {  public NewTopic()  {  base.TopicType = 0;  }  }  public class Reply : Topic  {  public Reply()  {  base.TopicType = 1;  }  [Column(Name = "ParentTopic", DbType = "int", CanBeNull = false)]  public int ParentTopic { get; set; }  }

對于主題貼,在數(shù)據庫中的TopicType就保存為0,而對于回復貼就保存為1?;貜唾N還有一個相關字段就是回復所屬主題貼的TopicID。那么,我們怎么告知Linq to sql在TopicType為0的時候識別為NewTopic,而1則識別為Reply那?只需稍微修改一下前面的Topic實體定義:

  1. [Table(Name = "Topics")]  

  2. [InheritanceMapping(Code = 0Type = typeof(NewTopic), IsDefault = true)]  

  3. [InheritanceMapping(Code = 1Type = typeof(Reply))]  

  4. public class Topic  

  5. {  

  6. [Column(Name = "TopicID"DbType = "int identity"IsPrimaryKey = true
    IsDbGenerated = trueCanBeNull = false)]  

  7. public int TopicID { get; set; }  

  8. [Column(Name = "TopicType"DbType = "tinyint"CanBeNull = false
    IsDiscriminator = true)]  

  9. public int TopicType { get; set; }  

  10. [Column(Name = "TopicTitle"DbType = "varchar(50)"CanBeNull = false)]  

  11. public string TopicTitle { get; set; }  

  12. [Column(Name = "TopicContent"DbType = "varchar(max)"CanBeNull = false)]  

  13. public string TopicContent { get; set; }  

為類加了InheritanceMapping特性定義,0的時候類型就是NewTopic1的時候就是Reply。并且為TopicType字段上的特性中加了IsDiscriminator = true,告知Linq to sql這個字段就是用于分類的字段。

感謝各位的閱讀!關于“Linq如何定義實體繼承”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI