CodeFirst中导航属性的代码实现 理解

 

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

包括以下信息:

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

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

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

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

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

 

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

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

CodeFirst中导航属性的代码实现 理解

时间: 2024-10-10 15:13:36

CodeFirst中导航属性的代码实现 理解的相关文章

nop中导航属性的写法

以以下三张表为例. SpecificationAttribute对应多个SpecificationAttributeOption.所以他们的关系是一对多. 在SpecificationAttribute.要先定义SpecificationAttributeOption的字段 . 如下所示. private ICollection<SpecificationAttributeOption> _specificationAttributeOptions; .csharpcode, .csharpc

EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?

前言 不知我们是否思考过一个问题,在关系映射中对于导航属性的访问修饰符是否一定必须为public呢?如果从未想过这个问题,那么我们接下来来探讨这个问题. EF 6.x和EF Core 何种情况下必须配置映射关系? 在EF 6.x中我们创建如下示例类. public partial class Customer { public int Id { get; set; } public string Name { get; set; } public string Email { get; set;

CodeFirst EF中导航属性的个人理解

>导航属性: 01.个人理解就是Ef中的属性在实体数据表中不存在(先这么认为); 02.就是除了根据表中列映射出的属性 之外根据表与表之间的关系的关联属性.方便操作与之关联的表; 例如: 有 表A 表B 的关系是1对多,根据A,B表创建A类和B类 那么在A类中除了根据表中列映射出的属性,还要根据表之间的关联关系创建一个B类型的ICollection<>集合属性,就叫做导航属性 而B类除了根据B表中的列创建的属性,还要创建一个A类型的导航属性, 说白了就是根据主键表创建的类 必须创建一个根

Java中的属性和字段有什么区别

1.Java中的属性和字段有什么区别? 答: Java中的属性,通常可以理解为get和set方法. 字段,通常叫做“类成员”. 属性只局限于类中方法的声明,并不与类中其他成员相关.例如: void setA(String s){} String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的 a 属性(注意是小写a).如果去掉了set的方法,则是可读属性,反之亦然. 类成员(字段),通常是在类中定义的类成员变量,例如: public class A{ pri

深入理解css中position属性及z-index属性

深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共有四种不同的定位方法,分别是static.fixed.relative.absolute.最后将会介绍和position属性密切相关的z-index属性. 第一部分:position: static static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中,因此,这种定位就不会收到t

【拼爹坑爹不比爹】深入理解css中position属性及z-index属性

总结:拼爹坑爹不比爹 1,定位移动:距左上角left+top;(移动后对于移动前:如果值为负数,则直接换成整数:如果值为整数,则直接改变相对方向.)2,单一父元素不设值,子z-index才奏效:"不比爹"3,多个父元素,"拼爹坑爹"(子凭父贵,子贵父不贵)(爹设值,因外有body)4,多个父元素多子元素,各父各子高低相互比,就是不比爹:>< [转]深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要

深入理解JavaScript中的属性和特性

深入理解JavaScript中的属性和特性? JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaScript中理解对象的本质.理解对象与类的关系.对象与引用类型的关系 对象属性如何进行分类 属性中特性的理解 第一部分:理解JavaScript中理解对象的本质.理解对象与类的关系.对象与引用类型的关系 对象的本质:ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.即

理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)

我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的.但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水. 下面我们主要分析一下ATL中的一些汇编代码. ATL中出现汇编代码主要是2处,一处是通过Thunk技术来调用类成员函数处理消息:还有一处是通过打开_

在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”

在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”. public class User { public long UserId { get; set; } public string UserName { get; set; } public string UserPwd { get; set; } public D