Exemple #1
0
        /// <summary>
        /// <para>从“One-to-Many”关系的“One”实体模型中查找表示“Many”的实体模型的类型。</para>
        /// <para>代表“One”的实体模型类型必须实现 <see cref="IChildEntityModel"/> 接口。</para>
        /// </summary>
        /// <param name="oneType">代表“One”的实体模型类型。</param>
        /// <returns>返回代表“Many”实体模型的类型(已找到)或空引用(<c>null</c>,未找到)</returns>
        /// <exception cref="ArgumentNullException">当 <paramref name="oneType"/> 为空引用(<c>null</c>)时引发。</exception>
        /// <exception cref="InvalidOperationException">当 <paramref name="oneType"/> 未实现 <see cref="IChildEntityModel"/> 接口时引发。</exception>
        /// <exception cref="InvalidOperationException">当 <paramref name="oneType"/> 代表的类型未实现 <see cref="IChildEntityModel"/> 接口时引发。</exception>
        public static Type FindManyTypeFromOne(this Type oneType)
        {
            #region Paramter Check

            ParamCheck.NotNull(oneType, nameof(oneType));

            #endregion

            // 如果 oneType 未实现 IChildEntityModel 接口,则
            if (!oneType.IsImplFrom <IChildEntityModel>())
            {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                  Properties.Resource.TypeImplInterfaceRequire,
                                                                  typeof(IChildEntityModel).FullName));
            }

            // 获取给定类型已实现的满足条件的接口类型(泛型&是 IChildEntityModel 的继承)
            var oneTypeInfo = oneType.GetTypeInfo();
            var childIfType = oneTypeInfo.GetInterfaces()
                              .FirstOrDefault(ifType =>
                                              ifType.GetTypeInfo().IsGenericType&&
                                              ifType.IsDerivedFrom <IChildEntityModel>());

            return(childIfType?.GenericTypeArguments[0]);
        }
Exemple #2
0
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            var typeBuilder = builder.Entity(modelType);

            typeBuilder.Property(nameof(ICnvOfEntityModel.Code))
            .IsRequired()
            .HasMaxLength(32)
            .IsUnicode(false);

            typeBuilder.Property(nameof(ICnvOfEntityModel.Name))
            .IsRequired()
            .HasMaxLength(64);

            typeBuilder.Property(nameof(ICnvOfEntityModel.Description)).HasMaxLength(255);
            typeBuilder.Property(nameof(ICnvOfEntityModel.Value)).HasMaxLength(255);
        }
        /// <summary>
        /// 使用指定的模型生成操作来初始化 <see cref="DbContextByMappingStrategy"/> 的新实例。
        /// </summary>
        /// <param name="action">用于配置模型的生成操作。</param>
        public DbContextByMappingStrategy(Action <ModelBuilder> action)
        {
            #region Parameter's Check

            ParamCheck.NotNull(action, nameof(action));

            #endregion

            this._action = action;
        }
 public void NotNullTest(string value, Type exType, string paramName)
 {
     if (exType != null)
     {
         ArgumentException ex =
             (ArgumentException)Assert.Throws(exType, () => ParamCheck.NotNull(value, paramName));
         Assert.Equal(String.IsNullOrEmpty(paramName) ? "name" : paramName, ex.ParamName);
     }
     else
     {
         ParamCheck.NotNull(value, paramName);
     }
 }
Exemple #5
0
        /// <summary>
        /// create this factory. all parameters are mandatory.
        /// </summary>
        /// <param name="evernoteUri">evernote base url, like http://sandbox.evernote.com/</param>
        /// <param name="consumerKey">your personal consumer key that you got from Evernote</param>
        /// <param name="consumerSecret">your secret key that you got from Evernote</param>
        public StoreFactory(Uri evernoteUri, string consumerKey, string consumerSecret)
        {
            ParamCheck.NotNull("evernoteUri", evernoteUri);
            ParamCheck.NullNorEmpty("consumerKey", consumerKey);
            ParamCheck.NullNorEmpty("consumerSecret", consumerSecret);

            this.evernoteUri    = evernoteUri;
            this.consumerKey    = consumerKey;
            this.consumerSecret = consumerSecret;
            this.servicebus     = new ServiceBus();

            //we are interested in auth event
            this.servicebus.AddSubscriber <AuthenticationEvent>(authenticationEventHandler);
        }
Exemple #6
0
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            var typeBuilder = builder.Entity(modelType);
            typeBuilder.Property(nameof(IStateOfEntityModel.State))
            .IsRequired();
        }
Exemple #7
0
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public virtual void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            builder.Entity(modelType)
            .Property(nameof(IParentEntityModelOfInt32 <EntityModelOfInt32> .ParentId))
            .IsRequired();
        }
Exemple #8
0
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            var typeBuilder = builder.Entity(modelType);
            typeBuilder.Property(nameof(INoteOfEntityModel.Note)).HasMaxLength(255);
            typeBuilder.Property(nameof(INoteOfEntityModel.SecondNote)).HasMaxLength(255);
            typeBuilder.Property(nameof(INoteOfEntityModel.ThirdNote)).HasMaxLength(255);
        }
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public virtual void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            #region  射的目的表名称

            string modelTypeName = modelType.Name;
            string tableName     = modelTypeName.Replace("EntityModel", String.Empty)
                                   .Replace("Model", String.Empty)
                                   .Replace("Entity", String.Empty);
            // 如果表名称为空,则使用类型名称替代。
            if (String.IsNullOrEmpty(tableName))
            {
                tableName = modelTypeName;
            }

            #endregion

            // 主键 ID 的名称。
            string idName = this.GetIdName(modelType);

            var typeBuilder = builder.Entity(modelType);
            typeBuilder.ToTable(tableName)
            .HasKey(idName)
            .HasName($"PK_{tableName}_{idName}");
        }
Exemple #10
0
        /// <summary>
        /// 进行映射处理。
        /// </summary>
        /// <param name="builder">指定当前上下文构建模型的生成器。</param>
        /// <param name="modelType">将要进行映射的实体模型类型。</param>
        /// <exception cref="ArgumentNullException">当 <paramref name="builder"/> 或 <paramref name="modelType"/> 为空引用(<c>null</c>)时引发。</exception>
        public virtual void Mapping(ModelBuilder builder, Type modelType)
        {
            #region Parameter Check

            ParamCheck.NotNull(builder, nameof(builder));
            ParamCheck.NotNull(modelType, nameof(modelType));

            #endregion

            // 检查可用性。
            if (!this.CanMapping(modelType))
            {
                return;
            }

            // 映射实体类型。
            var typeBuilder = builder.Entity(modelType);

            // 映射实体属性。
            typeBuilder.Property(nameof(IChildEntityModelOfGuid <EntityModelOfGuid> .CountOfChild))
            .IsRequired();

            // 获取子实体模型的类型。
            var cEntityModelType = modelType.FindManyTypeFromOne();

            // 获取子实体类型(EF 中的 EntityType)。
            var cEntityType = builder.Model.FindEntityType(cEntityModelType);
            // 获取子实体模型对应原表名称。
            var cTableName = cEntityType.Relational().TableName;

            // 映射“One-to-Many”关系。
            typeBuilder.HasMany(cEntityModelType,
                                nameof(IChildEntityModelOfGuid <EntityModelOfGuid> .Children))
            .WithOne(nameof(IParentEntityModelOfGuid <EntityModelOfGuid> .Parent))
            .HasForeignKey(nameof(IParentEntityModelOfGuid <EntityModelOfGuid> .ParentId))
            .HasConstraintName($"FK_{cTableName}_{nameof(IParentEntityModelOfGuid<EntityModelOfGuid>.ParentId)}");
        }