zoukankan      html  css  js  c++  java
  • CodeFirst中导航属性的代码实现 理解

    导航属性是在CodeFirst中,两中数据库表之间,多对多或者1对多中表关联的属性。导航属性并不带有数据,

    包括以下信息:

    • 名称。 (必需)

    • 导航属性要导航的关联。 (必需)

    • 导航属性要导航的关联端。 (必需)

    对于多对多的导航属性,两张表是可选的。如果对关联一端的某实体类型定义导航属性,则不需要对关联另一端的该实体类型定义导航属性。

    导航属性的数据类型是由其远程关联端的重数决定的。

    重数:在关联的一端可以存在的实体类型实例的数量。关联端重数可以有以下列值之一:

    • 一(1):表明在关联端存在且只存在一个实体类型实例。

    • 零或一 (0..1):表明在关联端不存在实体类型实例或存在一个实体类型实例。

    • 多 (*):表明在关联端不存在实体类型实例,或者存在一个或多个实体类型实例。

    如果是一对多。则如下所示

    image

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Nop.Core.Domain.Localization;
    using Nop.Core.Domain.Seo;
    using Nop.Core.Domain.Stores;

    namespace Nop.Core.Domain.Examination
    {
        public partial class School : BaseEntity
        {
            /// <summary>
            /// 获取或设置学校名
            /// </summary>
            public string SchoolName { get; set; }

            /// <summary>
            /// 获取或设置创建时间
            /// </summary>
            public DateTime CreateOnUtc { get; set; }

            /// <summary>
            /// 导航属性
            /// </summary>
            public ICollection<Major> Majors { get; set; }

        }
    }

    下面是Major的Domain文件。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Nop.Core.Domain.Localization;
    using Nop.Core.Domain.Seo;
    using Nop.Core.Domain.Stores;

    namespace Nop.Core.Domain.Examination
    {
        public partial class School : BaseEntity
        {
            /// <summary>
            /// 获取或设置学校名
            /// </summary>
            public string SchoolName { get; set; }

            /// <summary>
            /// 获取或设置创建时间
            /// </summary>
            public DateTime CreateOnUtc { get; set; }

            /// <summary>
            /// 导航属性
            /// </summary>
            public ICollection<Major> Majors { get; set; }

        }
    }

    接下来是两的关系,Mapping映射文件


    using Nop.Core.Domain.Examination;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity.ModelConfiguration;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Nop.Data.Mapping.Examination
    {
        public partial class SchoolMap : EntityTypeConfiguration<School>
        {

            public SchoolMap()
            {
                this.ToTable("School");
                this.HasKey(c => c.Id);
                this.Property(c=>c.CreateOnUtc).IsRequired();
                this.Property(c => c.SchoolName).IsRequired().HasMaxLength(1000);
                
            }

        }
    }

    using Nop.Core.Domain.Examination;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity.ModelConfiguration;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Nop.Data.Mapping.Examination
    {

        public partial class MajorMap : EntityTypeConfiguration<Major>
        {

            public MajorMap()
            {
                this.ToTable("Major");
                this.HasKey(c=>c.Id);
                this.Property(p => p.MajorName).HasMaxLength(1000);
                this.HasOptional(l => l.School)
                    .WithMany()
                    .HasForeignKey(l => l.SchoolId)
                    .WillCascadeOnDelete(true);
                   
            }

        }
    }

    上图中是二个实体的数据库关系图,Shool,Major。导航属性是在Major上定义的。同时也要在School中定义。

  • 相关阅读:
    fork()和僵尸进程
    布尔变量面试题
    vue学习之二
    vue学习之一
    圈复杂度
    phpExcel与jq的ajax
    Object.defineProperty与修改某个数组实现监听效果
    mpn不得不说的坑
    论javascript编写优美
    微信小程序之学习
  • 原文地址:https://www.cnblogs.com/zhaojianwei/p/3899260.html
Copyright © 2011-2022 走看看