在做MVC+EF CodeFirst 的Demo时,碰到的问题,

在组册用户时,要让用户输入确认密码,但是数据库中又不需要保存这个字段,解决方案很多了,这里我列出通过EF Code First的解决方案。

   UserInfo实体
    public class UserInfoModel
{
[UIHint("HiddenInput")]
public int UserId { get; set; }
[Display(Name = "用户名")]
public string UserName { get; set; }
[Display(Name = "密码")]
[DataType(DataType.Password)]
public string UserPwd { get; set; }
[Display(Name = "确认密码")]
[DataType(DataType.Password)]
public string ConfirmUserPwd { get; set; } public string Email { get; set; }
public DateTime RegisterDate { get; set; }
[Display(Name = "备注")]
public string Memo { get; set; }
public virtual RoleInfoModel Role { get; set; }
}
   //UserInfo的Fluent API  配置类
public class UserInfoConfiguration : EntityTypeConfiguration<UserInfoModel>
{
public UserInfoConfiguration()
{
HasKey(c => c.UserName);
Property(c => c.UserId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); //通过Map也可以忽略
//Map(l =>
//{
// l.Properties(x => new { x.UserId, x.UserName, x.UserPwd, x.Email, x.RegisterDate, x.Memo }); //}); Ignore(c => c.ConfirmUserPwd); //忽略这个属性
}
}
   关于EntityTypeConfiguration<TModel>.Map(),这个方法很强大。
   定义:
           public class EntityTypeConfiguration<TEntityType> : StructuralTypeConfiguration<TEntityType> where TEntityType : class
{
//……省略N行
public EntityTypeConfiguration<TEntityType> Map(Action<EntityMappingConfiguration<TEntityType>> entityMappingConfigurationAction); //…… }



   具体使用在以下5个方面:
   1.可以实现同一个实体映射到不同的表,也就是分割实体。
     现有StudentInfo实体类如下:
    public class Student
{
public Student()
{ }
public string StudentId { get; set; }
public string StudentName { get; set; }
public bool Sex { get; set; }
public DateTime Birthday { get; set; }
public string Email { get; set; }
public string QQ { get; set; }
public string MobilePhone { get; set; }
public string FixedPhone { get; set; }
public byte[] Photo { get; set; }
}

 
    public class StudentConfig : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Student>
{
public StudentConfig()
{
HasKey(c => c.StudentId);
Map(c =>
{
c.Properties(l => new { l.StudentName, l.Sex, l.QQ, l.FixedPhone, l.MobilePhone });
c.ToTable("StudentBasicInfo");
});
Map(c =>
{ c.Properties(l => new { l.Photo });
c.ToTable("StudentPhoto");
});
}
}

   生成的数据库表:
    
   

   2.可以实现多个实体映射到同一个表。
现有student和studentphoto实体类:
    public class Student
{
public Student()
{ }

public string StudentId { get; set; }

        public string StudentName { get; set; }
public bool Sex { get; set; }
public DateTime Birthday { get; set; }
public string Email { get; set; }
public string QQ { get; set; }
public string MobilePhone { get; set; }
public string FixedPhone { get; set; }

public StudentPhoto Photo { get; set; }

    }

    public class StudentPhoto
{

public string StudentId { get; set; }

        public byte[] Photo { get; set; }
       

public Student student { get; set; }

    }
 


    public class StudentConfig : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Student>
{
public StudentConfig()
{
HasKey(c => c.StudentId);

HasRequired(c => c.Photo).WithRequiredDependent(c => c.student);

            ToTable("student");
}
}
public class StudentPhotoConfig : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<StudentPhoto>
{
public StudentPhotoConfig()
{
HasKey(c => c.StudentId);
ToTable("student");
}
}

   要实现这个功能要注意以下几点:
1.实体之间要有一对一的关系(实体中绿色字体)
2.实体之间要有完全相同的主键(实体中红色字体)
3.配着类中要指明一对一的关系(StudentConfig 类中红色字体)
4.相同的表名。(ToTable("student");) 
   生成的数据库表:
 
   3.可以实现每个层次结构一张表 (TPH) 继承
   4.可以实现每个类型一张表 (TPT) 继承
   5.可以实现每个具体类型一张表 (TPC) 继承
   
     



Entity Framework Code First 中使用 Fluent API 笔记。的更多相关文章

  1. Entity Framework(七):Fluent API配置案例

    一.配置主键 要显式将某个属性设置为主键,可使用 HasKey 方法.在以下示例中,使用了 HasKey 方法对 Product 类型配置 ProductId 主键. 1.新加Product类 usi ...

  2. Entity Framework Code First实体对象变动跟踪

    Entity Framework Code First通过DbContext.ChangeTracker对实体对象的变动进行跟踪,实现跟踪的方式有两种:变动跟踪快照和变动跟踪代理. 变动跟踪快照:前面 ...

  3. Entity Framework Code First 学习日记(1)精

    我最近几天正在学习Entity Framework Code First.我打算分享一系列的学习笔记,今天是第一部分: 为什么要使用Code First: 近 年来,随着domain driven d ...

  4. Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)

    在前面的随笔<Entity Framework 实体框架的形成之旅--Code First的框架设计(5)>里介绍了基于Code First模式的实体框架的经验,这种方式自动处理出来的模式 ...

  5. How to: Use the Entity Framework Code First in XAF 如何:在 XAF 中使用EF CodeFirst

    This topic demonstrates how to create a simple XAF application with a business model in a DbContext ...

  6. Entity Framework Code First属性映射约定

    Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...

  7. Entity Framework Code First关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  8. Entity Framework Code First (三)Data Annotations

    Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...

  9. Entity Framework Code First (二)Custom Conventions

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. 微信蓝牙设备开发教程之获取设备deviceid和二维码(3)

    文章转载地址  http://www.vxzsk.com/87.html  设备授权 调用 设备授权新接口 ,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址, ...

  2. Selenium WebDriver 3.0 需要注意的事项

    以下所有代码基于Java 首先,要使用WebDriver 3.0 的话 请使用JAVA 8(必要)   其次,由于W3C标准化以及各大浏览器厂商的积极跟进,自WebDriver 3.0 之后,Sele ...

  3. YY一下淘宝商品模型

    淘宝的电商产品种类非常丰富,必然得力于其商品模型的高度通用性和扩展性. 下面我将亲自操作淘宝商品的发布过程,结合网上其他博客对淘宝网商品库的分析,简单谈谈我的理解. 注:下面不特殊说明,各个表除主键外 ...

  4. Sql Server系列:Transact-SQL概述

    结构化查询语言(Structure Query Language,SQL)是对数据库进行查询和修改的语言.Transact-SQL是SQL的一种实现形式,它包含了标准的SQL语言部分. 根据完成的具体 ...

  5. js立即执行函数

    一.JS立即执行函数的写法 方式1.最前最后加括号 (function(){alert(1);}()); 方式2.function外面加括号   (function(){alert(1);})(); ...

  6. 解密jQuery内核 DOM操作的核心函数domManip

    domManip是什么 dom即Dom元素,Manip是Manipulate的缩写,连在一起就是Dom操作的意思. .domManip()是jQuery DOM操作的核心函数 对封装的节点操作做了参数 ...

  7. C#6.0 十大常用特性

    一.字符串插值 (String Interpolation) C# 6之前我们拼接字符串时需要这样 var Name = "Jack"; var results = "H ...

  8. Vue.js实现checkbox的全选和反选

    小颖之前写的代码存在一个bug,就是当你选择全选的时候去掉后面的一个选项,再点全选结果就是反的了.很感谢博客园的朋友帮我改了这个问题嘻嘻,下面一起来看看具体是怎么实现的吧. 1.html <te ...

  9. 深入理解客户区尺寸client

    前面的话 关于元素尺寸,一般地,有偏移大小offset.客户区大小client和滚动大小scroll.前文已经介绍过偏移属性,后文将介绍scroll滚动大小,本文主要介绍客户区大小client 客户区 ...

  10. SpringMVC+FreeMarker

    前言: 最近在学习SpringMVC,模板引擎用的是FreeMarker,之前没有接触过.利用SpringMVC开发其实还有许多的步骤,比如控制层,服务层,持久化层,实体等等,先弄了一个小demo来总 ...