EF Framework Code First Fluent API

Source: Internet
Author: User
 In the code first method, the mapping between entities and data tables can also be handled through the fluent API.

To use the Fluent API, you must override the Onmodelcreating method when constructing a custom dbcontext, calling the fluent API in this method body.

As shown in the following code:

public class Blogdbcontext:dbcontext {public Blogdbcontext (): Base ("name=blogdb2005") {} protected override void Onmodelcreating (Dbmodelbuilder modelBuilder) {//do something base. Onmodelcreating (ModelBuilder); } }

Let's take a look at some simple examples

Primary key

Modelbuilder.entity < Bloguser > (). Haskey (user = user). USERID);

Federated primary Key

Federated primary Key Modelbuilder.entity < Bloguser > (). Haskey (user = new {user). UserId, user. Blogname});

field is not empty

Required attributes are required modelbuilder.entity < Bloguser > (). Property (user = user. Blogname). IsRequired ();

Set field Maximum length

Modelbuilder.entity < Bloguser > (). Property (user = user. Blogname). Hasmaxlength (20);

Set complex properties, complextype in the equivalent data attribute

Modelbuilder.complextype < Address > ();

Attribute fields are not mapped to data table fields, and are equivalent to notmapped in data attributes

Modelbuilder.entity < Bloguser > (). Ignore (user = user). MyProperty);

Set whether fields automatically grow

Set auto-grow, set to Databasegeneratedoption.none modelbuilder.entity < Bloguser > () If no autogrow is required. 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 above//modelbuilder.entity<bloguser> ()//. Hasmany (user = user). Posts)//. withrequired (p = p.bloguser)//. Hasforeignkey (p = p.userid);

Set Entity mappings to table names in a database

Modelbuilder.entity < Bloguser > (). ToTable ("MyUser");

Set entity properties to map to column names in a database

Modelbuilder.entity < Bloguser > (). Property (user = user. Description). Hascolumnname ("Userdescription"). Hascolumntype ("ntext");

The complete code is given below for easy testing: complete code

Class Fluentapisample {static void Main (string [] args) {using (var db = new Blogdbcontext ()) {db. Database.create (); }}} public class Blogdbcontext:dbcontext {public Blogdbcontext (): Base ("name=blogdb2005") {database.setinitial Izer < Blogdbcontext > (new Dropcreatedatabaseifmodelchanges < Blogdbcontext > ()); } protected override void Onmodelcreating (Dbmodelbuilder modelBuilder) {modelbuilder.entity < Bloguser > (). Haskey (user = user). USERID); Federated primary Key//modelbuilder.entity<bloguser> (). Haskey (user = new {user). UserId, user. Blogname}); Set auto-grow, set to Databasegeneratedoption.none modelbuilder.entity < Bloguser > () If no autogrow is required. Property (user = user. USERID). Hasdatabasegeneratedoption (databasegeneratedoption.identity); Required attributes are required 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 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); }} public, partial class Bloguser {public int UserId {GET, set,} public string Blogname {get; set;} public int My Property {GET, set, public address address {get; set;} public string Description {get; set;} public virtual I Collection < Post > Posts {get; set;}} Public partial class Post {public intPostID {get; set;} public string Posttitle {get, set,} public int UserId {get; set;} Public Bloguser Bloguser {get; set;} Public partial class Address {public string province {get; set;} public string City {get; set;}}

The result of the operation is shown below:

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.