2012-12-27 29 views
7

Tôi có hai bảng ProjectsTask. Task là một thực thể yếu của một dự án, do đó, khóa tổng hợp của nhiệm vụ là (ProjectId & TaskID). Tôi đã thử làm như vậy với mã sau đây, nhưng nó đưa ra một lỗiTạo khóa chính kết hợp bằng khung tổ chức 4.1

Không thể xác định hạn chế KEY CHÍNH trên cột có thể vô hiệu trong bảng 'Tác vụ'.

Tôi đang sử dụng cách tiếp cận mã đầu tiên để tạo bảng và tôi đã đảm bảo rằng cột không rỗng, nhưng nó vẫn không hoạt động. Hãy giúp tôi!

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

Trả lời

24

đi qua này đang tìm kiếm cái gì khác, hơi muộn, nhưng điều này bản đồ tốt cho một phím composite cho tôi

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

Hope this helps một ai đó.

+1

dưới đây là hướng dẫn xác nhận việc giải quyết này: http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx – CodeToad

Các vấn đề liên quan