完善实体类,由EF自动生成数据库过程中的一些问题

本文介绍了使用Entity Framework (EF)进行数据库操作的方法,包括如何配置表间关系以避免级联删除、设置字段属性不支持中文、配置一对多及多对多关系、正确放置DbContext的位置、阻止EF自动创建数据库等技巧。
摘要由CSDN通过智能技术生成

①、配置两表间的关系时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项目中

 

转载于:https://www.cnblogs.com/HuShaoyi/p/8536387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值