天天看點

Programming EF with Code First (一) - Configuring

-

Data Annotations are attributes that you apply directly to the

class or properties that you want to affect. These can be found in the System.Component

Model.DataAnnotations namespace.

class AnimalType

{

  public int Id { get; set; }

  [Required]

  public string TypeName { get; set; }

}

when it’s time to SaveChanges, Entity Framework will check to be sure that the property you have

flagged as Required is not empty. If it is empty, Entity Framework will throw an

exception.

[Table("Species")]

The data that you refer to as AnimalType in your application might be stored in a table called Spe

cies. The Table annotation allows you to specify this mapping.

 上面的配置等價于如下的Fluent API:

class VetContext:DbContext

  public DbSet<Patient> Patients { get; set; }

  public DbSet<Visit> Visits { get; set; }

  protected override void OnModelCreating

  (DbModelBuilder modelBuilder)

  {

    modelBuilder.Entity<AnimalType>()

     .ToTable("Species");

     .Property(p => p.TypeName).IsRequired();

  }

Organizing Fluent Configurations

You can group configuration by entity type within

individual EntityTypeConfiguration classes, and then tell the DbModelBuilder about

them in the OnModelCreating method. DbModelBuilder has a Configurations property to

which you can add these EntityTypeConfigurations.

using System.Data.Entity.ModelConfiguration;

using Model;

public class DestinationConfiguration : EntityTypeConfiguration<Destination>

  public DestinationConfiguration()

  {

    Property(d => d.Name).IsRequired();

    Property(d => d.Description).HasMaxLength(500);

    Property(d => d.Photo).HasColumnType("image");

  }

public class LodgingConfiguration : EntityTypeConfiguration<Lodging>

  public LodgingConfiguration()

    Property(l => l.Name).IsRequired().HasMaxLength(200);

//Adding the configuration classes in //OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder)

  modelBuilder.Configurations.Add(new   DestinationConfiguration());

  modelBuilder.Configurations.Add(new LodgingConfiguration());

 關于主鍵

public class Person

 [Key]

 public int SocialSecurityNumber { get; set; }

 public string FirstName { get; set; }

 public string LastName { get; set; }

如果用下面的代碼去進行插入,會報錯

private static void InsertPerson()

 var person = new Person

 {

  FirstName = "Rowan",

  LastName = "Miller",

  SocialSecurityNumber = 12345678

 };

 using (var context = new BreakAwayContext())

  context.People.Add(person);

  context.SaveChanges();

 }

 以為, key屬性預設是自增的字段

必須用如下代碼來進行修複

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

public int SocialSecurityNumber { get; set; }

Configuring Database-Generated Options with the Fluent API

modelBuilder.Entity<Trip>()

.HasKey(t => t.Identifier)

.Property(t => t.Identifier)

.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

繼續閱讀