如何使用EF Data Annotations和Fluent API指定外键关系?

时间:2013-03-05 03:45:12

标签: sql-server entity-framework entity-framework-4

我有以下数据库:

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    [DataVersion] ROWVERSION,
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);
CREATE TABLE [dbo].[TestAccount] (
    [TestAccountId]   INT            IDENTITY (1, 1) NOT NULL,
    [ApplicationId] INT,
    [Name] NVARCHAR (MAX) NOT NULL,
    [DataVersion] ROWVERSION,
    CONSTRAINT [PK_dbo.TestAccount] PRIMARY KEY CLUSTERED ([TestAccountId] ASC),
    CONSTRAINT fk_AccountApplication FOREIGN KEY (ApplicationId) REFERENCES Application(ApplicationId)
);

我的数据库有很多表,但我只是包含这些。

有人可以告诉我如何使用EF Fluent API来建模fk_AccountApplication关系吗?

如何使用数据注释执行此操作。那更容易吗?什么是最正常的方式 人们建立这些关系。使用注释还是使用Fluent API?

1 个答案:

答案 0 :(得分:1)

我个人觉得用数据注释更容易做到这一点,但我相信其他人会不同意我(对每个人都不同)。

就数据注释而言,以下是您将如何做到这一点:

您的Application对象应包含以下内容:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ApplicationID { get; set; }

public virtual ICollection<TestAccount> TestAccounts { get; set; }

然后您的TestAccount应包含以下2个属性:

[ForeignKey("Application")]
public int ApplicationID { get; set; }

public virtual Application Application { get; set; }

这应该告诉EF他们之间有一个FK链接