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: