【问题标题】:Creating composite primary key using entity framework 4.1使用实体框架4.1创建复合主键
【发布时间】:2013-02-11 18:37:47
【问题描述】:

我有两张桌子ProjectsTaskTask是项目的弱实体,所以task的复合主键是(ProjectId & TaskID)。我尝试使用以下代码这样做,但它给出了一个错误

无法在表“Tasks”中为可为空的列定义 PRIMARY KEY 约束。

我正在使用代码优先的方法来创建表,并且我已确保该列不为空,但它仍然无法正常工作。请帮忙!

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);
}

【问题讨论】:

    标签: asp.net-mvc entity-framework-4


    【解决方案1】:

    在寻找其他东西时遇到了这个,有点晚了,但这对我来说可以很好地映射到复合键

        [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; }
    

    希望这对某人有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2015-11-17
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多