完善实体类,由EF自动生成数据库过程中的一些问题
①、配置两表间的关系时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>
⑨、
原因:其中的一个Entity没有继承BaseEntity
⑩、Service只需安装Log4NET,UI调用,所有配置文件在UI项目中