EF外键关联

客户里面存在客服外键

基类模型

public class ModelBase
    {
        public ModelBase()
        {
            CreateTime = DateTime.Now;
        }
        [Key]
        public virtual int ID { get; set; }
        public virtual DateTime CreateTime { get; set; }
    }

客服模型

[Table("CustomerServer")]
    public partial class CustomerServer : ModelBase
    {
        public string ServerId { get; set; }

        public string ServerName { get; set; }

        public string Email { get; set; }
        public string Mobile { get; set; }

        public virtual List<Customer> CustomerManagerFor { get; set; }

}

客户模型

[Table("Customer")]
    public class Customer : ModelBase
    {
        [Required(ErrorMessage = "分支编号不能为空!"), MaxLength(4, ErrorMessage = "分支编号不能超过4个字符!")]
        public string BranchId { get; set; }

        [Required(ErrorMessage = "客户编号不能为空!"), MaxLength(10, ErrorMessage = "客户编号不能超过10个字符!")]
        public string CustomerId { get; set; }

        [Required(ErrorMessage = "客户姓名不能为空!"), MaxLength(50, ErrorMessage = "客户姓名不能超过50个字符!")]
        public string Name { get; set; }

        [Required(ErrorMessage = "性别不能为空!")]
        public int Sex { get; set; }

        [Required(ErrorMessage = "生日不能为空!")]
        public DateTime Birthday { get; set; }

        [Required(ErrorMessage = "资金账号不能为空!"), MaxLength(40, ErrorMessage = "资金账号不能超过40个字符!")]
        public string FundAccount { set; get; }

        [Required(ErrorMessage = "资产不能为空!")]
        public decimal Assets { get; set; }

        [Required(ErrorMessage = "联系方式不能为空!"), MaxLength(40, ErrorMessage = "联系方式不能超过40个字符!")]
        public string Contact { get; set; }

        [Required(ErrorMessage = "地级市不能为空!")]
        public int City { get; set; }

        [InverseProperty("CustomerManagerFor")]
        [Required(ErrorMessage = "客户经理不能为空!")]
        public virtual CustomerServer CustomerManager { get; set; }

        [Required(ErrorMessage = "开户日期不能为空!")]
        public DateTime OpeningDate { get; set; }

        [Required(ErrorMessage = "风险类型不能为空!")]
        public int RiskType { get; set; }

        [Required(ErrorMessage = "客户类型不能为空!")]
        public int CustomerType { get; set; }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class UniqueAttribute : ValidationAttribute
    {
        public override Boolean IsValid(Object value)
        {
            //校验数据库是否存在当前Key

            return true;
        }
    }

在上下文进行映射

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            Database.SetInitializer<CrmDbContext>(null);
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Customer>().HasRequired(v => v.CustomerManager).WithMany(d => d.CustomerManagerFor).Map(v => v.MapKey("CustomerManager")).WillCascadeOnDelete(false);
        }    public DbSet<Customer> Customers { get; set; }    public DbSet<CustomerServer> CustomerServers { get; set; }

查询

IQueryable<Customer> queryList = dbContext.Customers.Include("CustomerManager");

刚学EF,不懂要Include,查到的记录CustomerManager都是null,Include之后才有数据,在此标志一下

时间: 2024-11-03 03:41:28

EF外键关联的相关文章

主键关联、外键关联的区别

主键关联.唯一外键关联 的区别 主键关联是指的一个表的主键和另外一个表的主键关联外键关联是指的一个表的主键和另外一个表的非主键关联 主键关联:    person_t:      person_id      address_id address_t      address_id      address_name 他们通过 address_id 关联是外键关联 person_t:      person_id      persion_name    address_t      perso

外键关联非主键id时-hbm.xml配置,及其分页查询DaoImpl

表关联时,外键关联非主键id时-hbm.xml配置: (由于hibernate默认为关联主键查询,故需要配置相关hql语句的属性) <many-to-one name="areas" class="com.hnqy.entity.Areas" fetch="select" property-ref="areaid" foreign-key="areaid"> <column name=&q

Entity Framework - 基于外键关联的单向一对一关系

代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关系的映射! 一对一关系的映射: 用户账户密码信息表:包含用户名 密码 邮箱等账户登录时的信息 public class SystemAccount { public SystemAccount() { Id = DateUtils.GeneratedNewGuid(); } public Guid

清除oracl中有主外键关联的表中的部分数据。

1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ' as v_sql from user_constraints where CONSTRAINT_TYPE='R') loop EXECUTE IMMEDIATE c.v_sql;end loop;end;2.清空数据源.清空所有数据.一般情况是对表进行条件删除.begin for ec in (

hibernate一对一双向外键关联

一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card") //被控方 主控方必须交给其中的一方去控制,因为不可以双方都同时拥有控制对方的权利,假如是这样的话是没有办法保存成功的.这就是为什么需要指定mappenBy="card"的原因. 1.IdCard.java实体类: package oto_bfk; import javax.persi

《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13  过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用Code-First来管理数据访问 解决方案 实体框架不支持直接使用Include()时过滤关联实体集合,但我们可以通过创建一个匿名类型来完成同样的事情,匿名类型包含实体和要过滤的关联实体集合. 假设你有如图5-28所示的概念模型 图5-28 一个包含movies(电影)和它的categories(目录)的模

数据库一对一的两种关联 主键关联和外键关联

关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队. 数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联.图示如下: 一对一外键关联: 一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系 出自:http://hi.baidu.com/websatyr/item/10e3d83766ffb3f42784f481

hibernate5(12)注解映射[4]一对一外键关联

在实际博客站点中,文章内容的数据量非常多,它会影响我们检索文章其他数据的时间,如查询公布时间.标题.类别的等. 这个时候,我们能够尝试将文章内容存在还有一张表中,然后建立起文章--文章内容的一对一映射 一对一关联有两种方式,一种是外键关联.还有一种是复合主键关联. 外键关联 以下我们先看一个一对一单向关联的实例 /*************关联关系维护方************/ @Table(name = "t_article") @Entity public class Artic

存在外键关联的主表truncate如何做

主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应用控制,要求较高 我认为需要根据实际情况进行取舍,例如表不复杂,可以由应用实现,若表之间关联较多且复杂,那么交由数据库处理,至少保证不会错. 存在主外键关联的主表,由于存在外键关联关系,因此有些操作就会禁止,例如truncate. 实验 1. 创建测试表 SQL> create table tbl_