Mam 2 klasy: klienta i ankiety.Kod struktury obiektu Najpierw: jak opisywać klucz obcy pod kątem wartości "domyślnej"?
Każdy klient może mieć wiele ankiet - ale tylko jedną domyślną ankietę.
Mam zdefiniowane klasy tak:
public class Client
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string ClientName { get; set; }
public Nullable<int> DefaultSurveyID { get; set; }
[ForeignKey("DefaultSurveyID")]
public virtual Survey DefaultSurvey { get; set; }
public virtual ICollection<Survey> Surveys { get; set; }
}
public class Survey
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string SurveyName { get; set; }
[Required]
public int ClientID { get; set; }
[ForeignKey("ClientID")]
public virtual Client Client { get; set; }
}
Tworzy tabelę Client jak oczekuję:
[dbo].[Clients]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[ClientName] [nvarchar](max) NULL,
[DefaultSurveyID] [int] NULL
)
ale tabela Survey ma dodatkowy klucz obcy:
[dbo].[Surveys]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[SurveyName] [nvarchar](max) NULL,
[ClientID] [int] NOT NULL,
[Client_ID] [int] NULL
)
Dlaczego Code First generuje tę relację i jak jej odmówić?
Różne sposoby modelowania tego problemu w bazie danych: http://stackoverflow.com/q/5244920/150342 – Colin