web-dev-qa-db-ja.com

エンティティフレームワークの主キー/外部キー

MVC 3アプリケーションでエンティティクラスを作成しました。 RegistryIdという名前の属性の1つは、主キーと外部キーです。列の主キーと外部キーを作成するにはどうすればよいですか? EF ORMデザイナーを使用していません。私はクラスを手作業でコーディングしています。

31
DotnetSparrow

「EF ORMデザイナーを使用しない」とは、EF 4.1からの新しいDbContext AP​​Iを意味すると思います。 DbContext AP​​Iを意味しない場合でも、EDMX(デザイナー)を使用する必要があるためです。

データ注釈(System.ComponentModel.DataAnnotations):KeyAttributeおよびForeignKeyAttribute

public class Registry
{
    public virtual int Id { get; set; }
    public virtual MyEntity MyEntity { get; set; }
}

public class MyEntity
{
    [Key, ForeignKey("Registry")]
    public virtual int RegistryId { get; set; }

    public virtual Registry Registry { get; set; }
}

または、流暢なAPIを使用できます(派生コンテキストでOnModelCreatingをオーバーライドします)。

(編集:流暢なマッピングが逆になり、不完全だった)

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<MyEntity>()
                .HasKey(e => e.RegistryId);
    modelBuilder.Entity<MyEntity>()
                .Property(e => e.RegistryId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    modelBuilder.Entity<MyEntity>()
                .HasRequired(e => e.Registry)
                .WithRequiredDependent(r => r.MyEntity);
}

ここで、MyEntityはFKを持つエンティティであり、Registryは1対1の関係の主要なエンティティです。

55
Ladislav Mrnka