客户里面存在客服外键

基类模型

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(, ErrorMessage = "分支编号不能超过4个字符!")]
public string BranchId { get; set; } [Required(ErrorMessage = "客户编号不能为空!"), MaxLength(, ErrorMessage = "客户编号不能超过10个字符!")]
public string CustomerId { get; set; } [Required(ErrorMessage = "客户姓名不能为空!"), MaxLength(, ErrorMessage = "客户姓名不能超过50个字符!")]
public string Name { get; set; } [Required(ErrorMessage = "性别不能为空!")]
public int Sex { get; set; } [Required(ErrorMessage = "生日不能为空!")]
public DateTime Birthday { get; set; } [Required(ErrorMessage = "资金账号不能为空!"), MaxLength(, ErrorMessage = "资金账号不能超过40个字符!")]
public string FundAccount { set; get; } [Required(ErrorMessage = "资产不能为空!")]
public decimal Assets { get; set; } [Required(ErrorMessage = "联系方式不能为空!"), MaxLength(, 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之后才有数据,在此标志一下

EF外键关联的更多相关文章

  1. 基于EF的数据外键关联查询

    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...

  2. Entity FrameWork对有外键关联的数据表的添加操作

    前天做了一个MVC Entity FrameWork项目,遇到有外键关联的数据编辑问题.当你编辑的时候,按照正常的逻辑,把每个字段的数据都对号入座了,然后点击保存按钮,本以为会顺理成章的编辑数据,但是 ...

  3. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

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

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13  过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用 ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13  在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体, ...

  6. Entity Framework Code First添加修改及删除外键关联实体

    1.添加外键关联实体 1>.添加新的Province及City实体 using (var ctx = new PortalContext()) { var city1 = new City { ...

  7. Hibernate5.2之一对一外键关联(五)

                                                     Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关 ...

  8. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

  9. hibernate一对一双向外键关联

    一对一双向外键关联:双方都持有对方的外键关联关系. 主控方和一对一单向外键关联的情况是一样的,主要的差异表现为,被空方需要添加: @OneToOne(mappedBy="card" ...

随机推荐

  1. w3svc服务启动 不了,错误 1068:依赖服务或组件无法启动

    win10系统,装了iis就是启动不了,报错误 1068:依赖服务或组件无法启动. 各种实验无法使用,最后如下方法解决 运行命令regedit,打开注册表编辑器,进入:HKEY_LOCAL_MACHI ...

  2. Google Authenticator

    Google Authenticator 现在越来越多的网站采用两步验证,实现方式可能有所区别,一般来说是 1+? (1 即 普通的用户名和密码, ?可能是实物如U盾.手机短信验证码或其他).?的重点 ...

  3. TFS 自动同步Server 端文件的批处理命令

    TFS 自动同步Server 端文件的批处理命令 目前在我们组的工作中很多时候需要将TFS上Server端的代码自动无人值守的同步到本地中来, 找到了一些解决方案的资料http://bbs.scmro ...

  4. setContentType、setCharacterEncoding、pageEncoding和contentType

    request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值 response.setContentType("text/html;cha ...

  5. addEventListener循环绑定出现的问题

    今天 碰到这样一个问题 代码如下 var someth = document.getElementsByTagName("a"); for (var i = 0; i < 1 ...

  6. LoadRunner测试结果分析02 转载至zhangzhe的新浪博客

    LoadRunner测试结果分析之我见 上述测试过程的重点在于事务,而LoadRunner生成的测试结果图并不局限于事务上,其中还有是关于Vusers.Errors.Web Resources.Web ...

  7. 时间--cd //lastyear

    夏木, 天堂里面有没有车来车往,就像当年南京 街头的喧嚣,我知道即使繁华一片,仍是无法填补你心头无底洞般的孤独! 只是因为在人群中多看了你一眼再也无法忘掉你容颜 是不是真的可以一醉解千愁 爱要怎么说出 ...

  8. 【原创】Android内存管理-OnTrimMemory

    Application中有两个与内存管理相关的方法:onLowMemory()和 onTrimMemory(int level),源码如下 @CallSuper public void onLowMe ...

  9. MongoDB可视化工具RoboMongo----Windows安装 1

    https://robomongo.org/download 非常小白的安装 自动安装完成. 启动MongoDB Mongodb启动教程 启动RoMongo 创建新的Mongodb 自定义db名称 连 ...

  10. DIV+CSS:Margin和Padding属性[转载]

    margin和padding用来隔开元素,margin是隔开元素与外边,padding是隔开元素里边. margin: 包括margin-top.margin-right.margin-bottom. ...