Mego(05) - 创建模型

时间:2025-01-08 14:05:32

Mego框架使用一组约定来基于CLR类来构建模型。您可以指定其他配置来补充和/或覆盖通过约定发现的内容。

这里需要强调的我们EF不同的是框架只支持数据注释的语法来构建模型,后期只有通过其他接口才能更改模型定义。

框架中所的数据注释都在 Caredev.Mego.DataAnnotations 命名空间下。

public class Blog
{
    [Key]
    public int BlogId { get; set; }

    public string Url { get; set; }
}

主键约定

按照惯例,一个名为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 = )]
        public int Id { get; set; }

        [Key, Column(nameof(Number), Order = )]
        public int Number { get; set; }

        public string Name { get; set; }

        public string Address { get; set; }
    }

可为空属性

您可以使用数据注释来指示当前属性是否为空。

public class Blog
{
    public int BlogId { get; set; }
    [Nullable(false)]
    public string Url { get; set; }
}

并发令牌

与EF相同,本框架支持乐观并发

public class Person
{
    public int PersonId { get; set; }

    [ConcurrencyCheck]
    public string LastName { get; set; }

    public string FirstName { get; set; }
}

排除属性

你可以指定某个属性不参与ORM映射

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    [NotMapped]
    public DateTime LoadedFromDatabase { get; set; }
}