0

データベースに次のテーブルがあります。外部キーを設定しようとしていますが、これが正しく行われているかどうかわかりません。私が持っているのは、テーブル[Application]とテーブル[TestAccount]の関係です。たとえば、3つの異なる[Application]行があり、それぞれに0個または多数の[TestAccount]行があります。[TestAccount]行が既に存在する場合、[Application]行を削除できないようにします。

これが私のSQLです

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (50) NOT 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 (50) NOT NULL,
    [DataVersion] ROWVERSION,
    CONSTRAINT [PK_dbo.TestAccount] PRIMARY KEY CLUSTERED ([TestAccountId] ASC),
    CONSTRAINT fk_AccountApplication FOREIGN KEY (ApplicationId) REFERENCES Application(ApplicationId)
);

私はこれをEF用に構成しようとしていますが、これまでのところ次のようになっています。

  modelBuilder.Entity<Application>()
      HasKey(a => a.ApplicationId);
      Property(a => a.ApplicationId).
      HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).
      IsRequired();

  modelBuilder.Entity<Application>().
      Property(a => a.Name).
      IsRequired().
      HasMaxLength(50);

  modelBuilder.Entity<TestAccount>()
      HasKey(a => a.TestAccountId);
      Property(a => a.TestAccountId).
      HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).
      IsRequired();

  modelBuilder.Entity<TestAccount>().
      Property(t => t.Name).
      IsRequired();

データベース内の外部キーを使用してこれを正しく実行しているかどうか、また、FluentAPIを使用して外部キーを構成する方法を教えてもらえますか。

4

1 に答える 1

0

モデルが次のようになっていると仮定します。

public class Application 
{
    public int ApplicationId { get; set; }

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

public class TestAccount
{
    public int TestAccountId { get; set; }
    public int ApplicationId { get; set; }
    public string Name { get; set; }
    public virtual Application Application { get; set; }
}

FK から流暢なナビゲーション プロパティへのマッピングは次のようになります。

    modelBuilder.Entity<Application>()
        .HasMany(a => a.TestAccounts)
        .WithRequired(t => t.Application)
        .WillCascadeOnDelete(false);
于 2013-03-05T13:13:39.663 に答える