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中定义。

  • 相关阅读:
    OpenStack安装及监控配置视频教程
    具有可视化的功能的一款开源软件Gource
    Ubuntu 12.04使用演示
    VisualRoute for Mac OS 体验
    P1006-传纸条
    Leetcode-1157 Online Majority Element In Subarray(子数组中占绝大多数的元素)
    Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
    Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
    Leetcode-1154 Ordinal Number Of Date(一年中的第几天)
    P1508-Likecloud-吃、吃、吃
  • 原文地址:https://www.cnblogs.com/zhaojianwei/p/3899260.html
Copyright © 2011-2022 走看看