第41章 地址、用户地址实体及其约束规则的定义实现

1 Core.Domain.Common.Address

namespace Core.Domain.Common

{

    /// <summary>

    /// 【地址--类】

    /// <remarks>

    /// 摘要:

    ///     通过该实体类及其属性成员,用于实现当前程序【Core.【领域】.【常规】.【地址】实体与“[ShopDemo].[Address]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)

    /// </remarks>

    /// </summary>

    public class Address : BaseEntity

    {

        #region 属性

        /// <summary>

        /// 【上级区划编号】

        /// <remarks>

        /// 摘要:

        ///     获取/设置上级区划实体1个指定实例上级区划的长整型编号值(根区划的编号值为:0)

        /// </remarks>

        /// </summary>

        public long ParentId { get; set; }

        /// <summary>

        /// 【名称】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定行政区划的名称。

        /// </remarks>

        /// </summary>

        public string Name { get; set; }

        /// <summary>

        /// 【行政区划级别】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定地址所属行政区划的级别值(1~4)

        /// </remarks>

        /// </summary>

        public int Level { get; set; }

        /// <summary>

        /// 【启用?】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个值false(禁用)/true(默认值:启用),该值指示地址实体的1个指定实例是否处于启用状态。

        /// </remarks>

        /// </summary>

        public bool Enabled { get; set; }

        /// <summary>

        /// 【经度】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定地址的经度值(地球坐标系WGS84,经度)

        /// </remarks>

        /// </summary>

        public decimal? Longitude { get; set; }

        /// <summary>

        /// 【纬度】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定地址的纬度值(地球坐标系WGS84, 纬度)

        /// </remarks>

        /// </summary>

        public decimal? Latitude { get; set; }

        #endregion

    }

}

2 Core.Domain.Users.UserAddress

namespace Core.Domain.Users

{

    /// <summary>

    /// 【用户地址--类】

    /// <remarks>

    /// 摘要:

    ///     通过该实体类及其属性成员,用于实现当前程序【Core.【领域】.【用户集】.【用户地址】实体与“[ShopDemo].[UserAddress]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)

    /// </remarks>

    /// </summary>

    public class  UserAddress : BaseEntity, ILogicDeletedEntity

    {

        #region 属性

        /// <summary>

        /// 【用户编号】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户实体1个指定实例的长整型编号值。

        /// </remarks>

        /// </summary>

        public long UserId { get; set; }

        /// <summary>

        /// 【省/直辖市】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定省/直辖市区划的名称。

        /// </remarks>

        /// </summary>

        public string Province { get; set; }

        /// <summary>

        /// 【市】

        /// </summary>

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定市区划的名称。

        /// </remarks>

        public string City { get; set; }

        /// <summary>

        /// 【县/区】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定县/区区划的名称。

        /// </remarks>

        /// </summary>

        public string County { get; set; }

        /// <summary>

        /// 【街区】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定街区区划的名称。

        /// </remarks>

        /// </summary>

        public string Street { get; set; }

        /// <summary>

        /// 【地址】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定用户所对应的1个详细地址(为物流配送提供数据支撑)

        /// </remarks>

        /// </summary>

        public string Address { get; set; }

        /// <summary>

        /// 【手机号】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定用户所对应的1个手机号(为物流配送提供数据支撑)

        /// </remarks>

        /// </summary>

        public string Phone { get; set; }

        #region 属性--ILogicDeletedEntity

        /// <summary>

        /// (逻辑)删除?】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个值false((逻辑)删除)/true(已经(逻辑)删除),该值指示用户地址实体的1个指定实例是否已经处于(逻辑)删除状态。

        /// </remarks>

        /// </summary>

        public bool Deleted { get; set; }

        #endregion

        /// <summary>

        /// 【创建时间】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户地址实体1个指定实例第1次被持久化到角色表中的时间。

        /// </remarks>

        /// </summary>

        public DateTime CreatedDateTime { get; set; }

        /// <summary>

        /// 【创建时间】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户地址实体1个指定实例最后1次被修改后,持久化到角色表中的时间。

        /// </remarks>

        /// </summary>

        public DateTime UpdatedDateTime { get; set; }

        #endregion

        #region 属性--映射和级联构建

        /// <summary>

        /// 【单个权限】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定用户地址实例所对应的1个用户实例。

        /// 说明:

        ///     构建用户与用户地址实体及其表之间的1:n映射关系。

        /// </remarks>

        /// </summary>

        public virtual User UserSingle { get; set; }

        #endregion

    }

}

3 重构Core.Domain.Users.User

  /// <summary>

        /// 【用户地址集】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定用户实例所对应的所有用户地址实例。

        /// 说明:

        ///     构建用户与用户地址实体及其表之间的1:n映射关系。

        /// </remarks>

        /// </summary>

        public virtual ICollection<UserAddress> UserAddressCollection { get; set; }

4 Data.Mapping.Common.AddressBuilder

//Nuget

//Nuget--Microsoft.EntityFrameworkCore.SqlServer

using Microsoft.EntityFrameworkCore;

using Microsoft.EntityFrameworkCore.Metadata.Builders;

//项目

using Core.Domain.Common;

namespace Data.Mapping.Common

{

    /// <summary>

    /// 【地址生成器--类】

    /// <remarks>

    /// 摘要:

    ///     该类通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>泛型接口的“Configure”方法的定义,以实现把地址实体类及其属性成员相关约束规则及其级联关系定义,映射到地址表及其的相应字段上。

    /// </remarks>

    /// </summary>

    public class AddressBuilder : IEntityTypeConfiguration<Address>

    {

        #region 方法--IEntityTypeConfiguration<>

        ///<param name="builder">实体类型生成器实例,用于把当前程序中指定实体和属性所定义的约束规则,映射到数据库指定表及其字段上。</param>

        /// <summary>

        /// 【配置】

        /// <remarks>

        /// 摘要:

        ///     该方法通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>泛型接口的“Configure”方法的定义,以实现把地址实体类及其属性成员相关约束规则及其级联关系定义,映射到地址表及其的相应字段上。

        /// </remarks>

        /// </summary>

        public void Configure(EntityTypeBuilder<Address> builder)

        {

            //由于“EntityTypeBuilder<Address>”的参数已经泛型实例化,因此builder后不能再定义为:“builder.Entity<Address>().HasKey(address => address.Id);”

            //权限表及其字段约束规则,映射定义。

            builder.HasKey(address => address.Id);

            builder.Property(address => address.Name).IsRequired().HasMaxLength(255);

        }

        #endregion

    }

}

5 Data.Mapping.Users.UserAddressBuilder

//Nuget

//Nuget--Microsoft.EntityFrameworkCore.SqlServer

using Microsoft.EntityFrameworkCore;

using Microsoft.EntityFrameworkCore.Metadata.Builders;

//项目

using Core.Domain.Users;

namespace Data.Mapping.Users

{

    /// <summary>

    /// 【用户地址生成器--类】

    /// <remarks>

    /// 摘要:

    ///     该类通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>泛型接口的“Configure”方法的定义,以实现把用户地址实体类及其属性成员相关约束规则及其级联关系定义,映射到用户地址表及其的相应字段上。

    /// </remarks>

    /// </summary>

    public class UserAddressBuilder : IEntityTypeConfiguration<UserAddress>

    {

        #region 方法--IEntityTypeConfiguration<>

        ///<param name="builder">实体类型生成器实例,用于把当前程序中指定实体和属性所定义的约束规则,映射到数据库指定表及其字段上。</param>

        /// <summary>

        /// 【配置】

        /// <remarks>

        /// 摘要:

        ///     该方法通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>泛型接口的“Configure”方法的定义,以实现把用户地址实体类及其属性成员相关约束规则及其级联关系定义,映射到用户地址表及其的相应字段上。

        /// </remarks>

        /// </summary>

        public void Configure(EntityTypeBuilder<UserAddress> builder)

        {

            //由于“EntityTypeBuilder<UserAddress>”的参数已经泛型实例化,因此builder后不能再定义为:“builder.Entity<UserAddress>().HasKey(userAddress => userAddress.Id);”

            //用户表及其字段约束规则,映射定义。

            builder.HasKey(userAddress => userAddress.Id);

            builder.Property(userAddress => userAddress.Province).IsRequired().HasMaxLength(255);

            builder.Property(userAddress => userAddress.City).IsRequired().HasMaxLength(255);

            builder.Property(userAddress => userAddress.County).IsRequired().HasMaxLength(255);

            builder.Property(userAddress => userAddress.Street).IsRequired().HasMaxLength(50);

            builder.Property(userAddress => userAddress.Address).IsRequired().HasMaxLength(255);

            builder.Property(userAddress => userAddress.Phone).IsRequired().HasMaxLength(50);

            builder.Property(userAddress => userAddress.CreatedDateTime).IsRequired();

            builder.Property(userAddress => userAddress.UpdatedDateTime).IsRequired();

        }

        #endregion

    }

}

对以上功能更为具体实现和注释见:230210_035shopDemo(地址、用户地址实体及其约束规则的定义实现)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值