Entity Framework one to many 一对多

本文介绍了如何使用Fluent API在Entity Framework中实现一对多关系,以项目(Project)和回款(PayBack)为例,展示了如何定义主键、外键以及可选关系,并强调了配置过程中需要注意的两点:外键必须在关联实体中定义,且对于可空关系,外键数据类型应为int?。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

one to many 一对多关系

实体对应数据库中表来体现一对多关系,可以通过两种方式进行实现,约定+注释和fluent api的方式,本次实现使用的是fluent api,示例:一个项目类(Project)对应多次回款(payback),其中Project的主键为payback的外键,代码如下:

Project:

public partial class Project
    {
        public Project()
        {
            Users = new HashSet<User>();
            PayBack = new HashSet<PayBack>();
        }
        public virtual ICollection<User> Users
        {
            get;
            set;
        }
        public virtual ICollection<PayBack> PayBack
        {
            get;
            set;
        }
}
[Table("PROJECTS")]
    public partial class Project
    {
        [Key]
        [Column("ID")]
        public int Id
        {
            get;
            set;
        }
        [Column("PROJECTNAME")]
        [Required]
        [StringLength(250)]
        public string ProjectName
        {
            get;
            set;
        }
        [Column("PROJECTCODE")]
        public string ProjectCode
        {
            get;
            set;
        }
        [Column("STARTDATE")]
        [Required]
        public DateTime StartDate
        {
            get;
            set;
        }

        [Column("FINISHTIME")]
        public DateTime FinishTime
        {
            get;
            set;
        }

        [Column("SOURCECODEID")]
        public int SourceCodeID
        {
            get;
            set;
        }
    }

PayBack:

public partial class PayBack
    {
        public virtual Project Project
        {
            get;
            set;
        }
        [Column("PROJECTID")]
        public int? PROJECTID
        {
            get;
            set;
        }
}    
[Table("PAYBACK")]
    public partial class PayBack
    {
        [Key]
        [Column("ID")]
        public int Id
        {
            get;
            set;
        }
        [Column("AMOUNTOFMONEY")]
        public double AmountOfMoney
        {
            get;
            set;
        }
    }

    本例子中通过注释的方式定义表明,字段名,主键等信息,也可以通过约定的方式定义,比如主键可以字段中末尾包含ID(不区分大小写)的方式定义主键,包括外键可以跟关联表主键同名的属性来定义,也可以使用本例中的方式通过注释进行定义。需要详细了解可以参考点击这里。

fluent api:

public class ProjectEntityConfiguration : EntityTypeConfiguration<Project>
    {
        public ProjectEntityConfiguration()
        {
            HasKey(d => d.Id);
            HasMany(d => d.PayBack)
                .WithOptional(d => d.Project)
                .HasForeignKey(p=>p.PROJECTID);
        }
    }

    haskey定义主键,实体中已经通过注释的方式进行了定义,这里说明也可通过fluent api的方式进行定义。hasmany对应多个payback,withoptional可选的关系,也就是关系可以为空,hasforeignkey定义外键。

这里需要注意两点:

1.必须要在payback中定义外键。

2.如果关系为可空,那么外键的数据类型需要定义为int?。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值