原创

EF Code First一对一、一对多、多对多关联关系配置

查看例子源码
1、EF Code First一对一关联关系

  项目结构图:

  实体类:

  Account.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Northwind.App.Entities
{
public class Account
{
///


/// 账户ID
///

public int AccountID { get; set; }

   /// <summary>
   /// 账户名
   /// </summary>
   public string AccountName { get; set; }

   /// <summary>
   /// 密码
   /// </summary>
   public string Password { get; set; }

   /// <summary>
   /// 用户信息
   /// </summary>
   public virtual User User { get; set; }
}

}
复制代码
复制代码
  User.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Northwind.App.Entities
{
public class Account
{
///


/// 账户ID
///

public int AccountID { get; set; }

   /// <summary>
   /// 账户名
   /// </summary>
   public string AccountName { get; set; }

   /// <summary>
   /// 密码
   /// </summary>
   public string Password { get; set; }

   /// <summary>
   /// 用户信息
   /// </summary>
   public virtual User User { get; set; }
}

}
复制代码
复制代码
  实体映射类:

  AccountMap.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;

using Northwind.App.Entities;

namespace Northwind.App.Mapping
{
public class AccountMap : EntityTypeConfiguration
{
public AccountMap()
{
// Primary Key
this.HasKey(t => t.AccountID);

        // Properties
        this.Property(t => t.AccountName).HasMaxLength(50);
        this.Property(t => t.Password).HasMaxLength(100);

        // Table & Column Mappings
        this.ToTable("Account");
        this.Property(t => t.AccountID).HasColumnName("AccountID");
        this.Property(t => t.AccountName).HasColumnName("AccountName");
        this.Property(t => t.Password).HasColumnName("Password");
    }
}

}
复制代码
复制代码
  UserMap.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;

using Northwind.App.Entities;

namespace Northwind.App.Mapping
{
public class UserMap : EntityTypeConfiguration
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.AccountID);

        // Properties
        this.Property(t => t.AccountID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        this.Property(t => t.UserName).HasMaxLength(50);
        this.Property(t => t.Email).HasMaxLength(100);

        // Table & Column Mappings
        this.ToTable("User");
        this.Property(t => t.AccountID).HasColumnName("AccountID");
        this.Property(t => t.UserName).HasColumnName("UserName");
        this.Property(t => t.Email).HasColumnName("Email");
        this.Property(t => t.RegisterDate).HasColumnName("RegisterDate");

        // Relationships
        this.HasRequired(t => t.Account)
            .WithRequiredDependent(t => t.User);
    }
}

}
复制代码
复制代码
  NorthwindContext.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity;

using Northwind.App.Entities;
using Northwind.App.Mapping;

namespace Northwind.App
{
public class NorthwindContext : DbContext
{
static NorthwindContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
}

    public DbSet<Account> Accounts { get; set; }
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AccountMap());
        modelBuilder.Configurations.Add(new UserMap());
    }
}

}
复制代码
复制代码
  Program.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Northwind.App.Entities;

namespace Northwind.App
{
class Program
{
static void Main(string[] args)
{
using (NorthwindContext db = new NorthwindContext())
{
Account account = new Account { AccountName = "Test", Password = "1" };
db.Accounts.Add(account);

            User user = new User { AccountID = account.AccountID, UserName = "测试", Email = "test@126.com", RegisterDate = DateTime.Now };
            db.Users.Add(user);

            db.SaveChanges();
        }
    }
}

}
复制代码
复制代码
  代码运行后生成的数据库结构图:

2、EF Code First一对多关联关系

  关联表:Product 产品表、Category分类表

  关联关系:一个产品属于一个分类,一个分类可以有多个产品

  实体代码:

  Category.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Northwind.App.Entities
{
public class Category
{
///


/// 分类ID
///

public Guid CategoryID { get; set; }

    /// <summary>
    /// 分类名称
    /// </summary>
    public string CategoryName { get; set; }

    /// <summary>
    /// 产品
    /// </summary>
    public virtual ICollection<Product> Products { get; set; }
}

}
复制代码
复制代码
  Product.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Northwind.App.Entities
{
public class Product
{
///


/// 产品ID
///

public Guid ProductID { get; set; }

    /// <summary>
    /// 产品名称
    /// </summary>
    public string ProductName { get; set; }

    /// <summary>
    /// 单价
    /// </summary>
    public decimal UnitPrice { get; set; }

    /// <summary>
    /// 数量
    /// </summary>
    public Nullable<int> Quantity { get; set; }

    /// <summary>
    /// 库存
    /// </summary>
    public Nullable<int> UnitsInStock { get; set; }

    /// <summary>
    /// 产品类别ID
    /// </summary>
    public Guid CategoryID { get; set; }

    /// <summary>
    /// 产品类别
    /// </summary>
    public virtual Category Category { get; set; }
}

}
复制代码
复制代码
  实体映射类:

  CategoryMap.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;

using Northwind.App.Entities;

namespace Northwind.App.Mapping
{
public class CategoryMap : EntityTypeConfiguration
{
public CategoryMap()
{
// Primary Key
this.HasKey(t => t.CategoryID);

        // Properties
        this.Property(t => t.CategoryID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Property(t => t.CategoryName).IsRequired()
            .HasMaxLength(100);

        // Table & Column Mappings
        this.ToTable("Category");
        this.Property(t => t.CategoryID).HasColumnName("CategoryID");
        this.Property(t => t.CategoryName).HasColumnName("CategoryName");
    }
}

}
复制代码
复制代码
  ProductMap.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;

using Northwind.App.Entities;

namespace Northwind.App.Mapping
{
public class ProductMap : EntityTypeConfiguration
{
public ProductMap()
{
// Primary Key
this.HasKey(t => t.ProductID);

        // Properties
        this.Property(t => t.ProductID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        this.Property(t => t.ProductName).IsRequired()
            .HasMaxLength(100);
        this.Property(t => t.UnitPrice).HasPrecision(10, 2);

        // Table & Column Mappings
        this.ToTable("Product");
        this.Property(t => t.ProductID).HasColumnName("ProductID");
        this.Property(t => t.ProductName).HasColumnName("ProductName");
        this.Property(t => t.UnitPrice).HasColumnName("UnitPrice");
        this.Property(t => t.Quantity).HasColumnName("Quantity");
        this.Property(t => t.UnitsInStock).HasColumnName("UnitsInStock");
        this.Property(t => t.CategoryID).HasColumnName("CategoryID");

        // Relationships
        this.HasRequired(t => t.Category)
            .WithMany(t => t.Products)
            .HasForeignKey(t => t.CategoryID)
            .WillCascadeOnDelete(false);
    }
}

}
复制代码
复制代码
  NorthwindContext.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data.Entity;

using Northwind.App.Entities;
using Northwind.App.Mapping;

namespace Northwind.App
{
public class NorthwindContext : DbContext
{
static NorthwindContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
}

    public DbSet<Account> Accounts { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AccountMap());
        modelBuilder.Configurations.Add(new UserMap());
        modelBuilder.Configurations.Add(new CategoryMap());
        modelBuilder.Configurations.Add(new ProductMap());
    }
}

}
复制代码
复制代码
  Program.cs

复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Northwind.App.Entities;

namespace Northwind.App
{
class Program
{
static void Main(string[] args)
{
using (NorthwindContext db = new NorthwindContext())
{
Category category = new Category { CategoryName = "手机数码" };
db.Categories.Add(category);

            Product product = new Product { CategoryID = category.CategoryID, ProductName = "IPhone5", UnitPrice = 5000m, Quantity = 100, UnitsInStock = 60 };
            db.Products.Add(product);

            db.SaveChanges();
        }
    }
}

}
复制代码
复制代码
  运行代码后生成的数据表:

正文到此结束
该篇文章的评论功能已被站长关闭
本文目录