2012-12-27 9 views
7

Mam dwie tabele Projects i Task. Task jest słabą jednostką projektu, więc złożonym kluczem podstawowym zadania jest (ProjectId & TaskID). Próbowałem robić to z następującego kodu, ale daje błądTworzenie złożonego klucza podstawowego za pomocą struktury obiektu 4.1

nie można zdefiniować klucz podstawowy o wartości pustych kolumny w tabeli „Zadania”.

Używam podejście kodu najpierw tworzyć tabele i mam zapewnione, że kolumna nie jest zerowa, ale nadal nie działa. Proszę pomóż!

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

Odpowiedz

24

natknąłem się na to patrząc na coś innego, trochę późno, ale to dobrze odwzorowuje na kluczu złożonym dla mnie

[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 kogoś.

+1

Oto tutorial, który potwierdza tę soltyion: http://www.entityframeworktutorial.net/code-first/key-dataannotations-attribute-in-code-first.aspx – CodeToad

Powiązane problemy