加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用实体框架4.1创建复合主键

发布时间:2020-12-15 22:33:09 所属栏目:asp.Net 来源:网络整理
导读:我有两个表项目和任务.任务是项目的弱实体,因此任务的复合主键是(ProjectId TaskID).我尝试使用以下代码,但它给出了一个错误 Cannot define PRIMARY KEY constraint on nullable column in table ‘Tasks’. 我正在使用代码优先的方法来创建表,我确保列不是n
我有两个表项目和任务.任务是项目的弱实体,因此任务的复合主键是(ProjectId& TaskID).我尝试使用以下代码,但它给出了一个错误

Cannot define PRIMARY KEY constraint on nullable column in table ‘Tasks’.

我正在使用代码优先的方法来创建表,我确保列不是null,但它仍然无法正常工作.请帮忙!

public class Task
{
    [ForeignKey("ProjectId")]
    public Project Project { get; set; }
    [Required]
    public int ProjectId { get; set; }

    //[Key,Column(Order = 1)]
    [Required]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public virtual int TaskID { get; set; }
    ...
}

//using FluentAPI
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Task>().HasRequired(p => p.Project);
    modelBuilder.Entity<Task>().HasKey(p => new { p.ProjectId,p.TaskID });

    modelBuilder.Entity<Project>()
           .HasRequired(e=> e.Employee)
           .WithMany()
            .WillCascadeOnDelete(false);
}

解决方法

遇到这个寻找别的东西,有点晚了,但这对我来说很好地映射到一个复合键
[Key,Column(Order=1) ]
    public int KeyId { get; set; }
    [Key,Column(Order = 2)]
    public int Key1Id { get; set; }
    [Key,Column(Order = 3)]
    public int Key2Id  { get; set; }
    [Key,Column(Order = 4)]
    public int Key3Id  { get; set; }

希望这有助于某人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读