使用EF CodeFirst根據實體類生成資料庫
EF CodeFirst 建立資料庫
- 很多時候,一個專案只有模型層或者某幾個模型類,沒有資料庫指令碼,想建立資料庫來執行專案,只能一個個敲SQL建表語句或圖形化操作,十分耗時間,也很費腦細胞,
- 最近發現可以利用EF 裡的自動建立資料庫的功能,可以節約不少時間,資料庫建立後可能跟實際資料庫細節方面有所偏差,但的確節省不少勞力,
- 資料庫生成後,我們只需要修改欄位型別,刪除不必要的表與表之間的關係,新增一部分聚集索引,非聚集索引。
一.首先VS2013以上版本建立MVC4或者MVC5專案,在MVC自動生成的Models資料夾下,把你需要建立資料表的類新增進去,如圖:
Blog.cs實體類
[Table("Blog")]
public class Blog
{
public Blog()
{
Tags = new HashSet<Tag>();
Users = new HashSet<User>();
Posts = new HashSet<Post>();
SecurityKey = Guid.NewGuid();
}
public virtual int Id { get ; set; }
public virtual Guid SecurityKey { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual string Title { get ; set; }
public virtual string Subtitle { get; set; }
public virtual string LogoImage { get; set; }
public virtual bool AllowsComments { get; set; }
public virtual DateTime CreatedAt { get; set; }
}
Category.cs實體類
[Table("Category")]
public class Category
{
public Category()
{
Posts = new HashSet<Post>();
}
public virtual string Name { get; set; }
public virtual int Id { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
Comment.cs實體類
[Table("Comment")]
public class Comment
{
public virtual int Id { get; set; }
public virtual Post Post { get; set; }
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string HomePage { get; set; }
public virtual int Ip { get; set; }
public virtual string Text { get; set; }
}
Post.cs實體類
[Table("Post")]
public class Post
{
public Post()
{
Tags = new HashSet<Tag>();
Categories = new HashSet<Category>();
Comments = new HashSet<Comment>();
}
public virtual int Id { get; set; }
public virtual Blog Blog { get; set; }
public virtual User User { get; set; }
public virtual string Title { get; set; }
public virtual string Text { get; set; }
public virtual DateTime PostedAt { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
public virtual ICollection<Category> Categories { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
ReadOnlyBlog.cs實體類
[Table("ReadOnlyBlog")]
public class ReadOnlyBlog
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
}
Tag.cs實體類
[Table("Tag")]
public class Tag
{
public virtual int Id { get; set; }
public virtual object Entity { get; set; }
public virtual string Name { get; set; }
}
User.cs實體類
[Table("User")]
public class User
{
public User()
{
Posts = new HashSet<Post>();
Blogs = new HashSet<Blog>();
}
public virtual ICollection<Blog> Blogs { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual int Id { get; set; }
public virtual byte[] Password { get; set; }
public virtual string Email { get; set; }
public virtual string Username { get; set; }
public virtual DateTime CreatedAt { get; set; }
public virtual string Bio { get; set; }
}
建立資料庫 上下文,把AccountModels原先的實體刪掉,改成如下樣子,並且刪除AccountController,不然編譯通不過
//類要繼承自DbContext,而DbContext類在System.Data.Entity名稱空間下
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<Blog> Blog { get; set; }
public DbSet<Category> Category { get; set; }
public DbSet<Comment> Comment { get; set; }
public DbSet<Post> Post { get; set; }
public DbSet<ReadOnlyBlog> ReadOnlyBlog { get; set; }
public DbSet<Tag> Tag { get; set; }
public DbSet<User> User { get; set; }
}
接著,我們在Web.Config裡配置一下資料庫的連線字串
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=NHibernate;Persist Security Info=True;User ID=sa;Password=123456" providerName="System.Data.SqlClient" />
</connectionStrings>
最後我們使用HomeController來Index方法來執行生成,注意一定要將全部實體類跑一遍,才能觸發生成對應的表
生成的結果如圖:
資料關係圖:
相關推薦
使用EF CodeFirst根據實體類生成資料庫
EF CodeFirst 建立資料庫 很多時候,一個專案只有模型層或者某幾個模型類,沒有資料庫指令碼,想建立資料庫來執行專案,只能一個個敲SQL建表語句或圖形化操作,十分耗時間,也很費腦細胞, 最近發現可以利用EF 裡的自動建立資料庫的功能,可以節約不少時間
添加註解後,框架沒有自動根據實體類生成資料表,Hibernate
@Id註解:指定實體Bean的主鍵對映,需在getter方法上標註。@GeneratedValue註解:用於指定主鍵生成策略,註解支援的主鍵生成策略有: AUTO——相當於配置檔案中的native,根據底層資料庫自動選擇使用IDENTITY、SEQUENCE、TABLE型別(預設值)TABLE——使用ta
[開源] FreeSql.AdminLTE.Tools 根據實體類生成後臺管理程式碼
前言 FreeSql 釋出至今已經有9個月,功能漸漸完善,自身的生態也逐步形成,早在幾個月前寫過一篇文章《ORM 開發環境之利器:MVC 中介軟體 FreeSql.AdminLTE》,您可以先閱讀上一篇文章內容瞭解來龍去脈,再回到這裡觀看。 我個人非常喜歡小規模團隊的"單打獨鬥",有的時候即使在大公司,也是做
mybatis-generator資料庫註釋實體類生成以及generatorConfig檔案配置
專案裡新建表時model,mapper以及mapper.xml基本都是用Mybatis Generator(以下簡稱為MBG)自動生成的,但是MBG自動生成的model的註釋實在有點非人類,至少中國人是完全接受不了的,在配置中禁用掉註釋吧,倒是簡單了,可是生成的model類光禿禿的,啥都沒有,欄位方法沒有註釋
mybatis generator為實體類生成自定義註釋(讀取資料庫欄位的註釋新增到實體類,不修改原始碼)
我們都知道mybatis generator自動生成的註釋沒什麼實際作用,而且還增加了程式碼量。如果能將註釋從資料庫中撈取到,不僅能很大程度上增加程式碼的可讀性,而且減少了後期手動加註釋的工作量。 1、首先定義註釋生成外掛 package com.cmbc.datapla
反射+註釋,根據實體類物件生成SQL語句工具類
最近在寫一個公司內部專案,由於覺得配置Hibernate過於繁瑣,索性使用了spring的jdbc,可是又要寫很多的sql語句,為了偷偷懶,於是就寫個能通過實體類物件生成SQL語句的工具類。 目前只在MySql資料庫上實驗通過,其他資料庫未測試。 本工具類還有很多不足之
EF-DbUpdateException--實體類和資料庫列不對應的解決方案
錯誤資訊 1.VS實體類裡面的欄位 2資料庫裡面的欄位 猜測是因為欄位數不匹配導致的 3刪除多餘欄位 5.結果 錯誤資訊貼上: -------------------------Log_Header-------------------------2015-06-06
eclipse怎樣配置hibernate和反向生成實體類(mysql資料庫)
我真的受夠了,網路上對這個問題的回答隻言片語,也說不清楚,於是我決定自己寫一份,為了讓自己以後配置起來方便鞋,也希望大家少走彎路。 前提是先安裝好了eclipse和mysql資料庫。 1在Eclipse中新建一個測試工程 下載hibernate的jar包 下載下來之後
JFinal極速開發框架使用筆記(四) _JFinalDemoGenerator實體類生成及映射自動化
checked rem 獲取 fig res ner constant 生成器 項目 運行_JFinalDemoGenerator生成實體類和映射之前的項目結構: 運行之後: 生成和改變的文件: 實體類: package com.wazn.model; import
mybatis generator為實體類生成自定義註釋(讀取數據庫字段的註釋添加到實體類,不修改源碼)
super() .cn setter www. nts art pca target private 我們都知道mybatis generator自動生成的註釋沒什麽實際作用,而且還增加了代碼量。如果能將註釋從數據庫中撈取到,不僅能很大程度上增加代碼的可讀性,而且減少了後期
Java根據實體快速生成物件
一、來源 在寫程式碼時總是遇到下面這種情況: Account account = new Account(); account.setId(); account.setGmtCreate(); account.set
java 根據實體物件生成 增刪改的SQL語句 ModelToSQL
package com.xxx.utils; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.List; import java.util.Vector; import org.a
組合主鍵——實體類——Oracle資料庫
@Entity @Table(name = "XXXX") public class RolePrivilegeMap implements CmsMainBo { private RolePrivilegeMapId id; @EmbeddedId
DevExpress MVC 中使用XPO對映實體類到資料庫時拋異常的解決
錯誤異常如上,可能發生的原因是:在寫實體類時,把關係欄位添加了Persistent屬性導致的: 注意在關聯關係的屬性中,不能新增Persistent屬性
List根據實體類的某個屬性升序或者降序來排列
介紹 最近做的一個前臺的頁面的獲曲資料庫某個表的列表的功能,要求按照表的某個屬性來升序最好不要動mybatis,所以通過mybatis獲取的list,通過方法的 Collections.sort(list, new Comparator() {…});進行排序 升序 / 降序 i
EF CodeFirst資料遷移與防資料庫刪除
1 開啟migrations功能 enable-migrations -force 2 新增遷移版本 add-migration 名稱字尾 我們每次修改實體後,都應該使用這個add-migration來升級歷史版本 3 更新資料庫 update-database
實體類和資料庫多對一和一對多對映
用Teacher類和Grade舉例,Teacher類包含grade類的屬性,Grade也包含Teacher類的屬性,但是Grade中的Teaher屬性要用List<Teahcer> 這就是多對一和一對多,實體類程式碼如下: ------------------------------
MyBatis由淺入深學習總結之二:MyBatis解決Java實體類和資料庫表字段不一致方法總結
在此,首先說明一點任何永續性框架都需要解決一個問題,那就是Java實體類的欄位一般來說基本上會與資料庫表中欄位不一致,那麼它們是如何解決的呢?咱們以Hibernate和SpringJDBC為例說明一下; 1、Hibernate中一般通過XML對映和註解的方式解決不一致問題,
Hibernate之*hbm.xml檔案和實體類操作資料庫實現插入和查詢
一、實體類(Entity) package com.javademo; import java.util.Date; public class Event { private Long id; private String title;
使用ef codefirst開發,無法建立資料庫的問題
解決辦法:開啟Nugut程式包管理器控制檯,預設專案選擇:EntityFramework;輸入:Update-Database -Verbose Update-Database -StartUpProjectName "MyP