完善實體類,由EF自動生成數據庫過程中的一些問題
阿新 • • 發佈:2018-03-09
code 實體類 .config creat pub length conn log sun
①、配置兩表間的關系時WillCascadeOnDelete(false)取消級聯刪除
public AdminLogConfig() { this.ToTable("T_AdminLogs"); this.Property(a => a.Msg).IsRequired(); this.HasRequired(a => a.AdminUser).WithMany().HasForeignKey(a => a.AdminUserId).WillCascadeOnDelete(false); }
②、IsUnicode(false)設置為不支持中文
Property(e => e.Email).HasMaxLength(30).IsRequired().IsUnicode(false); Property(e => e.PhoneNum).HasMaxLength(20).IsRequired().IsUnicode(false); Property(e => e.PasswordSalt).HasMaxLength(20).IsRequired().IsUnicode(false); Property(e=> e.PasswordHash).HasMaxLength(100).IsRequired().IsUnicode(false);
③、配置一對多關系
//一般配置到“多”端,因為“一端”可能根本不知道“多端”的存在 HasOptional(u => u.City).WithMany().HasForeignKey(u => u.CityId) .WillCascadeOnDelete(false);
④、配置多對多關系
//多對多WithMany不能空 HasMany(a => a.Houses).WithMany(a=>a.Attachments).Map(m=>m.ToTable("T_HouseAttachments") .MapLeftKey("AttachmentId").MapRightKey("HouseId"));
⑤、Dbcontex應該在service層,不能到其他層,所以不聲明為public
class ZSZDbContext:DbContext
⑥、Database.SetInitializer<ZSZDbContext>(null);//當數據庫建好之後就可以設置不讓EF自動創建數據庫,後期靠自己改數據庫
⑦、生成數據庫
using (ZSZDbContext ctx = new ZSZDbContext()) { ctx.Database.Delete(); ctx.Database.Create(); }
⑧、EF自動生成數據庫,只需在UI層配置app.config,Service層只需引用EF
<connectionStrings> <add name="****" connectionString="Data Source=.;Initial Catalog=*****;User ID=****;Password=****" providerName="System.Data.SqlClient" /> </connectionStrings>
完善實體類,由EF自動生成數據庫過程中的一些問題