我用這個教程使用VS2015安裝EF:
EF - Console Application to New Database
基本上是:
- 確保您的目標的.NET Framework 4.5.1或更高版本。
- 確保您使用的是最新版本的nuget package manager
- 安裝這兩個包:
- EntityFramework.MicrosoftSqlServer - 預
- EntityFramework.Commands - 預
我我們創建了一個簡單的DbContext,其中包含兩個實體:
using Microsoft.Data.Entity;
using System.Collections.Generic;
public class SampleContext : DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Tenant> Tenants { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;");
// Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio
// optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Configure the name of the foreign key
modelBuilder.Entity<Person>()
.HasOne(p => p.Tenant)
.WithMany(t => t.Persons)
.HasConstraintName("MyForeignKey");
// Configure the name of a unique index
modelBuilder.Entity<Person>().HasAlternateKey(p => p.Email).ForSqlServerHasName("MyUniqueEmail");
}
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual Tenant Tenant { get; set; }
}
public class Tenant
{
public Tenant()
{
Persons = new HashSet<Person>();
}
public int TenantId { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> Persons { get; set; }
}
所以配置外鍵的名稱:
modelBuilder.Entity<Person>()
.HasOne(p => p.Tenant)
.WithMany(t => t.Persons)
.HasConstraintName("MyForeignKey");
要配置一個唯一索引的名稱:
modelBuilder.Entity<Person>().HasAlternateKey(p => p.Email).ForSqlServerHasName("MyUniqueEmail");
這時就需要使用包來創建遷移您的上下文Manager控制檯:
最後更新使用軟件包管理器控制檯數據庫:
使用SQL Server Management Studio中,我可以檢查我的索引的名字:
您使用的是什麼版本的EntityFramework? – Rob
實體框架7但大部分東西在6似乎工作.. – chris
它不重複EF核心有完全不同的API。 –