Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
475 views
in Technique[技术] by (71.8m points)

ef code first - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...