EF Code First关系规则及配置文档格式.docx
- 文档编号:18345021
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:15
- 大小:79.87KB
EF Code First关系规则及配置文档格式.docx
《EF Code First关系规则及配置文档格式.docx》由会员分享,可在线阅读,更多相关《EF Code First关系规则及配置文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
16
17///<
18 ///分类名称
19 ///<
20publicstringCategoryName{get;
21
22///<
23 ///描述
24 ///<
25publicstringDescription{get;
26
27///<
28 ///图片
29 ///<
30publicbyte[]Picture{get;
31
32///<
33 ///产品
34 ///<
35publicvirtualICollection<
Product>
Products{get;
36}
37}
Product.cs
6namespaceNorthwind.Domain.Entities
7{
8publicclassProduct
10///<
11 ///产品ID
12 ///<
13publicintProductID{get;
14
15///<
16 ///产品名称
17 ///<
18publicstringProductName{get;
19
20///<
21 ///单价
22 ///<
23publicdecimalUnitPrice{get;
24
25///<
26 ///库存
27 ///<
28publicintUnitsInStock{get;
29
30///<
31 ///是否售完
32 ///<
33publicboolDiscontinued{get;
34
35///<
36 ///产品分类
37 ///<
38publicvirtualCategoryCategory{get;
39}
40}
CategoryMap.cs
6usingSystem.Data.Entity.ModelConfiguration;
7usingSystem.ComponentModel.DataAnnotations;
8
9usingNorthwind.Domain.Entities;
10
11namespaceNorthwind.Domain.Mapping
12{
13publicclassCategoryMap:
EntityTypeConfiguration<
Category>
14{
15publicCategoryMap()
16{
17this.ToTable("
dbo.Category"
);
18this.HasKey(t=>
t.CategoryID);
20this.Property(t=>
t.CategoryName).IsRequired().HasMaxLength(15);
21this.Property(t=>
t.Picture).HasColumnType("
image"
22}
23}
24}
ProductMap.cs
13publicclassProductMap:
15publicProductMap()
dbo.Product"
t.ProductID);
t.ProductName).IsRequired().HasMaxLength(50);
t.UnitPrice).HasPrecision(18,2);
Data中类定义:
NorthwindContext.cs
6usingSystem.Data.Entity;
8usingNorthwind.Domain.Entities;
9usingNorthwind.Domain.Mapping;
11namespaceNorthwind.Data
13publicclassNorthwindContext:
DbContext
15publicDbSet<
Categories{get;
16publicDbSet<
17
18protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder)
19{
20modelBuilder.Configurations.Add(newCategoryMap());
21modelBuilder.Configurations.Add(newProductMap());
App中类定义:
Program.cs
6usingNorthwind.Data;
7usingNorthwind.Domain.Entities;
9usingSystem.Data.Entity;
11namespaceNorthwind.App
13classProgram
15staticvoidMain(string[]args)
17//数据模型改变,删除数据库重新创建。
18Database.SetInitializer(newDropCreateDatabaseIfModelChanges<
NorthwindContext>
());
20Categoryc=newCategory(){CategoryName="
电子数码"
};
22Productp=newProduct(){ProductName="
笔记本电脑"
UnitPrice=4500.00m,Category=c,UnitsInStock=100,Discontinued=false};
23using(NorthwindContextdb=newNorthwindContext())
24{
25db.Categories.Add(c);
26db.Products.Add(p);
27
28db.SaveChanges();
29}
30
31Console.WriteLine("
Finish"
32Console.ReadKey();
33}
34}
35}
运行之后生成的数据库结构
2>
、产品实体类中指定外键属性
修改Domain中Product.cs代码:
11 ///产品ID
21 ///单价
26 ///库存
36 ///分类ID
38publicintCategoryID{get;
39
40///<
41 ///产品分类
42 ///<
43publicvirtualCategoryCategory{get;
44}
45}
运行之后生成的数据库中表结构如下:
默认的外键规则:
[TargetTypeKeyName],[TargetTypeName]+[TargetTypeKeyName],或者[Navigation
PropertyName]+[TargetTypeKeyName]。
3>
、使用DataAnnotations指定外键属性
10publicclassProduct
13 ///产品ID
15publicintProductID{get;
18 ///产品名称
20publicstringProductName{get;
23 ///单价
25publicdecimalUnitPrice{get;
28 ///库存
30publicintUnitsInStock{get;
33 ///是否售完
35publicboolDiscontinued{get;
36
37///<
38 ///分类ID
39 ///<
40publicintCategoryID{get;
41
42///<
43 ///产品分类
44 ///<
45[ForeignKey("
CategoryID"
)]
46publicvirtualCategoryCategory{get;
47}
48}
4>
、使用Fluent指定外键属性
17//PrimaryKey
20//Properties
22this.Property(t=>
23
24//Table&
ColumnMappings
25this.ToTable("
26this.Property(t=>
t.ProductID).HasColumnName("
ProductID"
27this.Property(t=>
t.ProductName).HasColumnName("
ProductName"
28this.Property(t=>
t.UnitPrice).HasColumnName("
UnitPrice"
29this.Property(t=>
t.UnitsInStock).HasColumnName("
UnitsInStock"
30this.Property(t=>
t.Discontinued).HasColumnName("
Discontinued"
31this.Property(t=>
t.CategoryID).HasColumnName("
32
33//Relationships
34this.HasRequired(t=>
t.Category)
35.WithMany(t=>
t.Products)
36.HasForeignKey(t=>
t.CategoryID)
37.WillCascadeOnDelete(false);
38}
5>
、示例代码附件
以上示例代码附件,并补充Product与Category及Supplier的两个外键关联。
Northwind-一对多外键.rar
二、多对多关系
表说明:
用户表:
User
角色表:
Role
用户与角色多对多,一个用户可以属于多个角色,一个角色可以有多个用户。
Domain中User.cs
8publicclassUser
11 ///用户ID
13publicintUserID{get;
16 ///用户名
18publicstringUserName{get;
21 ///密码
23publicstringPassword{get;
26 ///角色
28publicICollection<
Role>
Roles{get;
30}
Role.cs
8publicclassRole
11 ///角色ID
13publicintRoleID{get;
16 ///角色名称
18publicstringRoleName{get;
21 ///用户
23publicvirtualICollection<
User>
Users{get;
25}
UserMap.cs
13publicclassUserMap:
15publicUserMap()
t.UserID);
t.UserName).IsRequired().HasMaxLength(50);
t.Password).IsRequired().HasMaxLength
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EF Code First关系规则及配置 First 关系 规则 配置