zoukankan      html  css  js  c++  java
  • Entity Framework备忘


    总结一对多、多对多的“最佳实践”
    一对多最佳方法(不配置一端的集合属性):
    1、 多端
    public class Student
    {
    public long Id { get; set; }
    public string Name { get; set; }
    public long ClassId { get; set; }
    public virtual Class Class { get; set; }
    }
    2、 一端
    public class Class
    {
    public long Id { get; set; }
    public string Name { get; set; }
    }
    3、 在多端的模型配置(StudentConfig)中:
    this.HasRequired(e => e.Class).WithMany() .HasForeignKey(e=>e.ClassId);


    多对多最佳配置
    1、 两端模型
    public class Student
    {
    public long Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Teacher> Teachers { get; set; } = new List<Teacher>();
    }
    public class Teacher
    {
    public long Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Student> Students { get; set; } = new List<Student>();
    }
    2、 在其中一端配置(StudentConfig)
    this.HasMany(e => e.Teachers).WithMany(e=>e.Students).Map(m =>//不要忘了WithMany的参数
    m.ToTable("T_StudentTeachers").MapLeftKey("StudentId").MapRightKey("TeacherId"));
    4、 多对多中 移除关系:t.Students.Remove(t.Students.First()); 添加关系
    5、 (*)多对多中还可以为中间表建立一个实体方式映射。当然如果中间关系表还想有其他字
    段,则要必须为中间表建立实体类(中间表和两个表之间就是两个一对多的关系了)。
    6、 数据库创建策略(*):
    如果数据库创建好了再修改模型或者配置,运行就会报错,那么就要手动删除数据库或者:
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<XXXContext>());如果报错“数据库正在使用”,可能是因为
    开着 Mangement Studio,先关掉就行了。
    知道就行了,只适合学习时候使用。

    ```
    using log4net;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using ZSZ.Service.Entities;

    namespace ZSZ.Service
    {
    public class ZSZDbContext : DbContext
    {
    //ILog ILogger,
    private static ILog log = LogManager.GetLogger(typeof(ZSZDbContext));

    public ZSZDbContext():base("name=connstr")
    //name=conn1表示使用连接字符串中名字为conn1的去连接数据库
    {
    Database.SetInitializer<ZSZDbContext>(null);
    this.Database.Log = (sql) => {
    log.DebugFormat("EF执行SQL:{0}", sql);
    };
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    base.OnModelCreating(modelBuilder);
    modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
    }
    public DbSet<AdminUserEntity> AdminUsers { get; set; }
    public DbSet<UserEntity> Users { get; set; }
    public DbSet<CityEntity> Cities { get; set; }
    public DbSet<CommunityEntity> Communities { get; set; }
    public DbSet<PermissionEntity> Permissions { get; set; }
    public DbSet<RegionEntity> Regions { get; set; }
    public DbSet<RoleEntity> Roles { get; set; }
    public DbSet<SettingEntity> Settings { get; set; }
    public DbSet<AttachmentEntity> Attachments { get; set; }
    public DbSet<HouseEntity> Houses { get; set; }
    public DbSet<HouseAppointmentEntity> HouseAppointments { get; set; }
    public DbSet<IdNameEntity> IdNames { get; set; }
    public DbSet<HousePicEntity> HousePics { get; set; }
    public DbSet<AdminLogEntity> AdminUserLogs { get; set; }
    }

    }

    ```

  • 相关阅读:
    Java实现 LeetCode 92 反转链表 II
    Java实现 LeetCode 92 反转链表 II
    Java实现 LeetCode 91 解码方法
    Java实现 LeetCode 91 解码方法
    Java实现 LeetCode 91 解码方法
    CDialogBar(对话条)和CReBar(伸缩条)的编程
    WinSock
    WinSock
    静态文本显示图标图片
    拆分窗口
  • 原文地址:https://www.cnblogs.com/wangyinlon/p/10907064.html
Copyright © 2011-2022 走看看