1. 程式人生 > >完善實體類,由EF自動生成數據庫過程中的一些問題

完善實體類,由EF自動生成數據庫過程中的一些問題

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自動生成數據庫過程中的一些問題