1. 程式人生 > >Mego開發文檔 - 數據註釋建模

Mego開發文檔 - 數據註釋建模

自動發現 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開發文檔 - 數據註釋建模