10

私は2つのテーブルProjectsTask. Taskはプロジェクトの弱いエンティティであるため、タスクの複合主キーは ( ProjectId & TaskID) です。次のコードで試してみましたが、エラーが発生します

テーブル 'Tasks' の null 許容列に PRIMARY KEY 制約を定義できません。

コード ファースト アプローチを使用してテーブルを作成しています。列が 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);
}
4

1 に答える 1

34

少し遅れて何か他のものを探してこれに出くわしましたが、これは私にとって複合キーにうまくマップされます

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

これが誰かに役立つことを願っています。

于 2013-02-11T10:37:47.893 に答える