Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Primary /Foreign Key in Entity Framework

I have created an entity class in my MVC 3 application. One of the attribute named RegistryId is primary key as well as foreign key. How can I make a column primary key as well as Foreign key ? I am not using EF ORM designer. I am coding classes by hand.

like image 236
DotnetSparrow Avatar asked Mar 22 '11 07:03

DotnetSparrow


People also ask

Do we use foreign keys in Entity Framework?

Relationships in an Entity Framework Core (EF Core) model are represented using foreign keys (FKs). An FK consists of one or more properties on the dependent or child entity in the relationship.

How do I set primary key in Entity Framework?

Configuring a primary key By convention, a property named Id or <type name>Id will be configured as the primary key of an entity. Owned entity types use different rules to define keys. You can configure a single property to be the primary key of an entity as follows: Data Annotations.

How do I create a foreign key in Entity Framework Code First MVC?

To create Foreign Key, you need to use ForeignKey attribute with specifying the name of the property as parameter. You also need to specify the name of the table which is going to participate in relationship. I mean to say, define the foreign key table.

Is primary key mandatory in Entity Framework?

The Entity framework will not support to have a table without primary key, but we can overcome this issue by accessing the table with additional column via a view and marking the new column as Primary in entity framework. Entity Framework requires primary keys for entities.


1 Answers

I think by "not using EF ORM designer" you mean new DbContext API from EF 4.1. Because if you don't mean DbContext API you still have to use EDMX (designer).

You can either use data annotations (System.ComponentModel.DataAnnotations): KeyAttribute and 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; } } 

Or you can use fluent API (overriding OnModelCreating in your derived context):

(Edit: fluent mapping was reversed and incomplete)

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

Where MyEntity is your entity with FK and Registry is principal entity in 1:1 relationship.

like image 95
Ladislav Mrnka Avatar answered Oct 03 '22 21:10

Ladislav Mrnka