第1章 SqlSugar-表到实体、实体到表及库表操作
第2章 SqlSugar增删改操作
第3章 SqlSugar查询操作
第4章 SqlSugar导航查询、反向导航查询、导航插入、导航更新
四张表成级联关系,由上到下分别为:
以下实体类仅做导航操作参考使用:
[SugarTable("Patient")]
[DataContract]
public class Patient
{
#region Private members
private int? _id;
private string _patientId;
private string _firstName;
private List<Study> _studyList;
private DateTime _lastUpdatedDateTime;
#endregion
#region constructor
public Patient(string lastName, string firstName, DateTime? dob, enumSex sex)
{
_lastName = lastName;
_firstName = firstName;
_dob = dob;
_sex = sex;
}
public Patient ()
{
}
#endregion
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public virtual int? Id
{
get { return _id; }
set { _id = value; }
}
[SugarColumn(InsertServerTime = true, UpdateServerTime = true)]
public virtual DateTime LastUpdatedDateTime
{
get { return _lastUpdatedDateTime; }
set { _lastUpdatedDateTime = value; }
}
[DataMember(IsRequired = false, Order = 2)]
public virtual string PatientId
{
get { return _patientId; }
set { _patientId = value; }
}
[SugarColumn(ColumnName = "PatientFirstName")]
public virtual string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
//导航查询注解
[Navigate(NavigateType.OneToMany, nameof(Study.PatientDbId))]
public virtual List<Study> StudyList
{
get { return _studyList; }
set { _studyList = value; }
}
}
[SugarTable("Study")]
[DataContract]
public class Study
{
#region Private Members
private int? _id; // Study Db Id
private int? _patientDbId; // Patient Db Id
private Patient _pateint;
private string _studyInstanceUid;
private string _studyId;
private string _studyDescription;
private List<Series> _seriesList;
#endregion Private Members
#region Constructor
public Study(int? dbId, int? patDbId, string studyUid)
{
_id = dbId;
_patientDbId = patDbId;
_studyInstanceUid = studyUid;
}
public Study()
{
}
#endregion Constructor
#region Properties
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public virtual int? Id
{
get { return _id; }
set { _id = value; }
}
[SugarColumn(IsIgnore = true)]
public virtual int? DbId
{
get { return Id; }
}
[SugarColumn(ColumnName = "PatId")]
public virtual int? PatientDbId
{
get { return _patientDbId; }
set { _patientDbId = value; }
}
//反向导航查询注解
[Navigate(NavigateType.ManyToOne, nameof(PatientDbId))]
public virtual Patient Patient
{
get { return _pateint; }
set { _pateint = value;
_patientDbId = _pateint.Id;
}
}
[SugarColumn(ColumnName = "StudyInstanceUid")]
public virtual string StudyUid
{
get { return _studyInstanceUid; }
set { _studyInstanceUid = value; }
}
public virtual string StudyId
{
get { return _studyId; }
set { _studyId = value; }
}
[Navigate(NavigateType.OneToMany, nameof(Series.StudyDbId))]
public virtual List<Series> SeriesList
{
get { return _seriesList; }
set { _seriesList = value; }
}
#endregion Properties
}
[SugarTable("Series")]
public class Series
{
#region Private Members
private int? _studyDbId;
private int? _id;
private string _seriesInstanceUid;
private string _studyInstanceUid;
private StatusEnum _status;
private Study _study;
private List<Instance> _instanceList;
private double? _fileSizeInMB;
#endregion Private Members
#region Constructor
public Series()
{
_fileSizeInMB = 0.0;
_numberOfImages = 0;
}
#endregion Constructor
#region Properties
[SugarColumn(ColumnName = "StudyId")]
public virtual int? StudyDbId
{
get { return _studyDbId; }
set { _studyDbId = value; }
}
[SugarColumn(IsIgnore = true)]
public virtual int? SeriesDbId
{
get { return Id; }
}
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
[Id(Name = "Id")]
[Generator(1, Class = "identity")]
public virtual int? Id
{
get { return _id; }
set { _id = value; }
}
[Navigate(NavigateType.ManyToOne, nameof(StudyDbId))]
public virtual Study Study
{
get { return _study; }
set { _study = value;
_studyDbId = _study.Id;
}
}
[SugarColumn(ColumnName = "SeriesInstanceUid")]
public virtual string SeriesUid
{
get { return _seriesInstanceUid; }
set { _seriesInstanceUid = value; }
}
[SugarColumn(ColumnName = "StudyInstanceUid")]
public virtual string StudyUid
{
get { return _studyInstanceUid; }
set { _studyInstanceUid = value; }
}
public virtual string PatientId { get; set; }
[Navigate(NavigateType.OneToMany, nameof(Instance.SeriesId))]
public virtual List<Instance> InstanceList
{
get { return _instanceList; }
set { _instanceList = value; }
}
#endregion Properties
}
[SugarTable("Instance")]
public class Instance
{
#region private members
private int? _id;
private Series _series;
private string _seriesInstacneUid;
private string _fileName;
private int? _seriesId;
#endregion private members
#region Properties
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public virtual int? Id
{
get { return _id; }
set { _id = value; }
}
[Navigate(NavigateType.ManyToOne, nameof(SeriesId))]
public virtual Series Series
{
get { return _series; }
set { _series = value; }
}
[SugarColumn(ColumnName = "SeriesId")]
public virtual int? SeriesId
{
get { return _seriesId; }
set { _seriesId = value; }
}
public virtual string SeriesInstanceUid
{
get{ return _seriesInstacneUid ; }
set { _seriesInstacneUid = value; }
}
}
sqlsugar的SqlSugarClient:
public class Config
{
///
/// Return SqlSugar DBContext DB Instance
///
///
public static SqlSugarClient GetClient()
{
var db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = @"xxxxxxxxx",
DbType = DbType.SqlServer,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true
},
//patient导航查询,包含下面三层:StudyList》SeriesList》InstanceList
IList<Patient> list = Config.GetClient().Queryable<Patient>()
.Includes(p => p.StudyList,st=>st.SeriesList,se=>se.InstanceList)
.ToList();
//study导航查询,包含下面两层:SeriesList》InstanceList
var list1 = Config.GetClient().Queryable<Study>()
.Includes(x => x.SeriesList,se=>se.InstanceList)
.ToList();
//series导航查询,包含下面一层:InstanceList
var list2 = Config.GetClient().Queryable<Series>()
.Includes(se => se.InstanceList)
.ToList();
//反向查询,study查patient
var studylist = Config.GetClient().Queryable<Study>()
.Includes(x => x.Patient)
.where(x=>x.Id==1)//可以配合where
.ToList();
//反向查询,series查study》patient
var serieslist = Config.GetClient().Queryable<Series>()
.Includes(x => x.Study,y=>y.Patient)
.ToList();
//反向查询,instance查series查study查patient
var instancelist = Config.GetClient().Queryable<Instance>()
.Includes(z=>z.Series,x => x.Study, y => y.Patient)
.ToList();
同时插入study及其包含的SeriesList,以及每个series中包含的InstanceList
Config.GetClient().InsertNav(study)
.Include(z1 => z1.SeriesList)
.ThenInclude(z1 => z1.InstanceList)
.ExecuteCommand();
A实体类包含B实体类的这种属性,在B属性上添加注解[Navigate(NavigateType.OneToOne, nameof(B.Id))]
B实体类
同时插入A及对应的B:
Config.GetClient().InsertNav(List<A>)
.Include(z1 => z1.B)
.ExecuteCommand();
var List<Study> list=new List<Study>(){....};
Config.GetClient().UpdateNav(list)
.Include(z1 => z1.SeriesList)
.ExecuteCommand();
Config.GetClient().UpdateNav(list)
.Include(z1 => z1.SeriesList).ThenInclude(z1 => z1.InstanceList)//更新2层
.Include(z1 => z1.xxxList)//更新其他第1层
.ExecuteCommand();