Code First Fluent API

Source: Internet
Author: User

In the Code First method, you can also use Fluent APIs to process ing between entities and data tables.

To use the Fluent API, you must override the OnModelCreating method when constructing a custom DbContext. In this method, the Fluent API is called.

As shown in the following code:

Publicclass BlogDbContext: DbContext
{
Public BlogDbContext ()
: Base ("name = BlogDB2005 ")
{

}
Protectedoverridevoid OnModelCreating (DbModelBuilder modelBuilder)
{

// Do something
Base. OnModelCreating (modelBuilder );
}
}

 

Here are some simple examples.

Primary Key

ModelBuilder. Entity <BlogUser> (). HasKey (user => user. UserId );

Joint primary key

// Federated primary key
ModelBuilder. Entity <BlogUser> (). HasKey (user => new {user. UserId, user. BlogName });

The field is not empty.

// Required attribute
ModelBuilder. Entity <BlogUser> (). Property (user => user. BlogName). IsRequired ();

Set the maximum field length

ModelBuilder. Entity <BlogUser> (). Property (user => user. BlogName). HasMaxLength (20 );

Set complex attributes. ComplexType is equivalent

ModelBuilder. ComplexType <Address> ();

Attribute fields are not mapped to data table fields, which is equivalent to NotMapped in data characteristics.

ModelBuilder. Entity <BlogUser> (). Ignore (user => user. MyProperty );

Set whether the field is automatically increased

// Set Automatic growth. If Automatic growth is not required, set it to DatabaseGeneratedOption. None.
ModelBuilder. Entity <BlogUser> (). Property (user => user. UserId)
. HasDatabaseGeneratedOption (DatabaseGeneratedOption. Identity );

Set Foreign keys

/// Generate a one-to-many relationship
ModelBuilder. Entity <Post> ()
. HasRequired (p => p. BlogUser)
. WithMany (user => user. Posts)
. HasForeignKey (p => p. UserId );

/// Equivalent to the above
// ModelBuilder. Entity <BlogUser> ()
//. HasMany (user => user. Posts)
//. WithRequired (p => p. BlogUser)
//. HasForeignKey (p => p. UserId );

 

Set the table name mapped to the database.

ModelBuilder. Entity <BlogUser> (). ToTable ("MyUser ");

Set the name of the column mapped to the object property in the database.

ModelBuilder. Entity <BlogUser> ()
. Property (user => user. Description)
. HasColumnName ("userDescription ")
. HasColumnType ("ntext ");

The complete code is provided below to facilitate testing:

Class FluentAPISample
{

Staticvoid Main (string [] args)
{
Using (var db = new BlogDbContext ())
{
Db. Database. Create ();
}
}
}

Publicclass BlogDbContext: DbContext
{
Public BlogDbContext ()
: Base ("name = BlogDB2005 ")
{
Database. SetInitializer <BlogDbContext> (
New DropCreateDatabaseIfModelChanges <BlogDbContext> ()
);
}
Protectedoverridevoid OnModelCreating (DbModelBuilder modelBuilder)
{
ModelBuilder. Entity <BlogUser> (). HasKey (user => user. UserId );
// Federated primary key
// ModelBuilder. Entity <BlogUser> (). HasKey (user => new {user. UserId, user. BlogName });

// Set Automatic growth. If Automatic growth is not required, set it to DatabaseGeneratedOption. None.
ModelBuilder. Entity <BlogUser> (). Property (user => user. UserId)
. HasDatabaseGeneratedOption (DatabaseGeneratedOption. Identity );

// Required attribute
ModelBuilder. Entity <BlogUser> (). Property (user => user. BlogName). IsRequired ();
ModelBuilder. Entity <BlogUser> (). Property (user => user. BlogName). HasMaxLength (20 );
ModelBuilder. Entity <BlogUser> (). Ignore (user => user. MyProperty );

ModelBuilder. ComplexType <Address> ();

/// Generate a one-to-many relationship
ModelBuilder. Entity <Post> ()
. HasRequired (p => p. BlogUser)
. WithMany (user => user. Posts)
. HasForeignKey (p => p. UserId );

/// Equivalent to the above
// ModelBuilder. Entity <BlogUser> ()
//. HasMany (user => user. Posts)
//. WithRequired (p => p. BlogUser)
//. HasForeignKey (p => p. UserId );

ModelBuilder. Entity <BlogUser> (). ToTable ("MyUser ");

ModelBuilder. Entity <BlogUser> ()
. Property (user => user. Description)
. HasColumnName ("userDescription ")
. HasColumnType ("ntext ");

Base. OnModelCreating (modelBuilder );
}
}

Publicpartialclass BlogUser
{
Publicint UserId {get; set ;}
Publicstring BlogName {get; set ;}
Publicint MyProperty {get; set ;}
Public Address {get; set ;}
Publicstring Description {get; set ;}
Publicvirtual ICollection <Post> Posts {get; set ;}
}
Publicpartialclass Post
{
Publicint PostId {get; set ;}
Publicstring PostTitle {get; set ;}
Publicint UserId {get; set ;}
Public BlogUser {get; set ;}
}
Publicpartialclass Address
{
Publicstring Province {get; set ;}
Publicstring City {get; set ;}
}

The running result is shown as follows:

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.