Mego開發文檔 - 數據註釋建模
阿新 • • 發佈:2018-04-09
自動發現 int ide UC add 排除屬性 ber null 字符
數據註釋建模
Mego框架使用一組約定來基於CLR類來構建模型。您可以指定其他配置來補充或覆蓋通過約定發現的內容。
在 Mego 中所有的數據對象必須要有主鍵。這裏需要聲明與EF不同的是框架只支持數據註釋的語法來構建模型,在框架自動發現後,只有通過其他接口才能更改模型定義,我們使用一種簡單直接的方式來聲明,例如:
public class Blog
{
[Key]
public int BlogId { get; set; }
public string Url { get; set; }
}
常用的數據註釋特性類都在
using Caredev.Mego.DataAnnotations;
命名空間下。
主鍵約定
我們約定一個名為Id或<type name>Id將被配置為當前數據對象的主鍵屬性。
class Car
{
public string Id { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
class Car { public string CarId { get; set; } public string Make { get; set; } public string Model { get; set; } }
您可以使用數據註釋強制一個或多個屬性為主鍵。以下為單個主鍵和復合主鍵的示例:
class Car
{
[Key]
public string LicensePlate { get; set; }
public string Make { get; set; }
public string Model { get; set; }
}
public class Warehouse { [Key, Column(nameof(Id), Order = 1)] public int Id { get; set; } [Key, Column(nameof(Number), Order = 2)] public int Number { get; set; } public string Name { get; set; } public string Address { get; set; } }
如果您聲明數據對象為復合主鍵。
自增列
有不少數據庫是支持標識列(自增列),使用該特性可以聲明一個屬性受數據庫自增列控制,同時可以指定自增的起始及步長。
public class Blog
{
[Identity(1, 1)]
public int BlogId { get; set; }
public string Url { get; set; }
}
排除屬性
您可以指定數據對象中某個屬性不參與映射,補充如果某個屬性為只讀屬性框架會自動將它排除,這與強制聲明排除特性效果相同。
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
[NotMapped]
public DateTime LoadedFromDatabase { get; set; }
}
並發控制
與EF相同,本框架支持樂觀並發,您可以聲明一個或多個屬性參與提交時並發檢查。
public class Person
{
public int PersonId { get; set; }
[ConcurrencyCheck]
public string LastName { get; set; }
public string FirstName { get; set; }
}
可為空屬性
指示當前屬性是否可以為空。
public class Blog
{
public int BlogId { get; set; }
[Nullable(false)]
public string Url { get; set; }
}
長度
配置長度向數據存儲提供關於用於給定屬性的適當數據類型的提示。最大長度僅適用於數組或可變長度的數據類型,例如byte[]。
public class Blog
{
public int BlogId { get; set; }
[Length(500, false)]
public byte[] Image { get; set; }
}
字符串
在CLR中的字符串類型將會映射到數據庫中的多種字符串存儲類型,該特性可確定對應的實際類型。例如下面代碼中聲明Url屬性在SQL Server數據庫中的類型為nvarchar(500)。
public class Blog
{
public int BlogId { get; set; }
[String(500, false)]
public string Url { get; set; }
}
精度
用於配置存精度信息的數據類型列,例如decimal。
public class Product
{
public int Id { get; set; }
[Precision(12,4)]
public decimal Price { get; set; }
}
Mego開發文檔 - 數據註釋建模