2015年11月6日星期五

EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD) - wer_ltm

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD) - wer_ltm  阅读原文»

前言

此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题。

本次使用订单表和员工表建立多对多关系。

首先是订单表:

public class Order
{
public int OrderId { get; set; }

public string OrderTitle { get; set; }

public string CustomerName { get; set; }

public DateTime TransactionDate { get; set; }

[ConcurrencyCheck]
[Timestamp]
public byte[] TimeStamp { get; set; }

public virtual ICollection<Employee> InvolvedEmployees { get; set; }
}

接下来是员工表:

public class Employee
{
public int EmployeeId { get; set; }

public string EmployeeName { get; set; }

public virtual ICollection<Order> Orders { get; set; }
}

映射文件(mapping):

public class OrderMap:EntityTypeConfiguration<Order>
{
public OrderMap()
{
this.HasKey(o => o.OrderId);
//OrderId为自增长
this.Property(o => o.OrderId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(o => o.OrderTitle).IsRequired().HasMaxLength(64);//订单名称为必填,最大长度为64;
this.Property(o => o.CustomerName).IsRequired().HasMaxLength(64);//订单名称为必填,最大长度为64;
this.Property(o => o.TransactionDate).IsRequired(); //订单名称为必填,最大长度为64;
}
}
public class EmployeeMap:EntityTypeConfiguration<Employee>
{
/// <summary>
/// 构造函数
/// </summary>
public EmployeeMap()
{
this.HasKey(x => x.EmployeeId);
this.ToTable("Employees");
this.Property(x => x.EmployeeName).IsRequired().HasMaxLength(20);


//设置多对多的关系 .Map()配置用于存储关系的外键列和表。
/*
Employees HasMany此实体类型配置一对多关系。对应Orders实体
WithMany 将关系配置为 many:many,且在关系的另一端有导航属性。
* MapLeftKey 配置左外键的列名。左外键指向在 HasMany 调用中指定的导航属性的父实体。
* MapRightKey 配置右外键的列名。右外键指向在 WithMany 调用中指定的导航属性的父实体。
*/
this.HasMany(x => x.Orders).
WithMany(x
=> x.InvolvedEmployees).
Map(m
=> m.ToTable("EmployeeOrder").
MapLeftKey(
"EmployeeId").
MapRightKey(
"OrderId"));
}
}

dbcontext文件:

public class EfCodeFirstWithManyDbContext:DbContext

{
public EfCodeFirstWithManyDbContext()
:
base("DefaultConnection")
{

}

public IDbSet<Order> Orderses { get; set; }
public IDbSet<Employee> Employeees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(
new OrderMap());
modelBuilder.Configurations.Add(
new EmployeeMap());
base.OnModelCreating(modelBuilder);
}
}

生成数据库:

image

数据库关系图:

Android之登录那点事 - 小破孩123  阅读原文»

  随着互联网的高速发展,一个应用为了保护用户的隐私,通常会通过设置用户名+密码的验证方式保证用户隐私的相对安全,我知道一般网站的登录验证,通常会设置一个二维码,通过验证二维码,防止恶意软件通过机械程序,对用户密码进行破解,那么Android设备如何实现这个功能呢?相信很多开发者对此不屑一顾,因为这样增加了用户使用的复杂性,很多软件是不会这样设计的,现在我们暂且不谈它是不是有用,今天我们重点探讨一下,如何在Android的设备上实现这个功能。本篇为大家介绍的内容包括:1、用户连续多次输错密码,增加验证码验证;2、Android如何通过http请求达到与服务器之间的通讯。好了下面开始我们今天内容的介绍,首先我们先一起来学习一下如何实现用户连续多次输错密码,增加验证码功能。

  既然用的到二维码,那么Android如何生成二维码呢?为大家提供一个生成二维码的类:

//生成二维码的类
public class BPUtil {

/**
* 用于生成二维码的字符
*/
private static final char[] CHARS = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a','b','c','d','e','f','g','h','i','j','k','m','l','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','M','L','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
};

private static BPUtil bpUtil;

public static BPUtil getInstance() {
if(bpUtil == null)
bpUtil
= new BPUtil();
return bpUtil;
}

// width="60" height="30"
// base_padding_left="5"
// range_padding_left="10"
// base_padding_top="15"
// range_padding_top="10"

没有评论:

发表评论