gpt4 book ai didi

entity-framework - 首先, Entity Framework 代码:如何为 “Default”值注释外键?

转载 作者:行者123 更新时间:2023-12-03 08:54:46 25 4
gpt4 key购买 nike

我有2个类(class):客户和调查。

每个客户可以有许多调查-但只能有一个默认调查。

我已经定义了这样的类:

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

如我所料,这将创建Client表:
[dbo].[Clients]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[ClientName] [nvarchar](max) NULL,
[DefaultSurveyID] [int] NULL
)

但是Survey表有一个额外的外键:
[dbo].[Surveys]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[SurveyName] [nvarchar](max) NULL,
[ClientID] [int] NOT NULL,
[Client_ID] [int] NULL
)

为什么“代码优先”会产生这种关系,如何告诉我不这样做呢?

最佳答案

问题是,当您在两个实体之间具有多个关系时,EF Code First无法找出匹配的导航属性,除非您告诉它如何,这是代码:

public class Client
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

public string ClientName { get; set; }

/****Change Nullable<int> by int?, looks better****/
public int? DefaultSurveyID { get; set; }

/****You need to add this attribute****/
[InverseProperty("ID")]
[ForeignKey("DefaultSurveyID")]
public virtual Survey DefaultSurvey { get; set; }

public virtual ICollection<Survey> Surveys { get; set; }
}

在您以前的版本中,EF正在创建该额外的关系,因为它不知道 DefaultSurvey属性引用了 ID类的 Survey,但是您可以让它知道,添加属性 InverseProperty,其参数是该属性的名称在 Survey中,您需要 DefaultSurvey与之匹配。

关于entity-framework - 首先, Entity Framework 代码:如何为 “Default”值注释外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com