EF实体框架创建方法

EF实体框架创建方法: 

1、添加EF框架:

在工程中,先添加文件夹:DataModel(方便管理),在文件夹中再添加新项:数据--ADO.Net实体数据模型:
命名为: DataModel.edmx。并勾选“确定对象名称的单复数形式”(会创建集合和项的名称区别)。

2、数据模型文件说明:

DataModel.edmx:生成的数据模型文件包。
DataModel.Context.cs:包括模型中,所有表集合的管理类。
DataModel.tt子节点下的文件:表数据类的定义(映射)。

3、问题:

1、生成数据模型以后,很多外键,需要手动修改。--不需修改。

2、需要手动创建一些枚举变量(在模型浏览器中)。

自动生成很多Nullable<byte>变量,对于记录状态的字段,需要手动定义枚举类型。

Nullable<byte>:表示可以为空的<byte>类型字段。---不需修改。


定义枚举类型方法:----重点!

以 (任务表)中的任务状态为例:
1)点击数据库模型文件 DataModel.edmx,左侧显示数据库关系图,在关系图中任意单击,
在解决方案管理器旁边选择“模型浏览器”。

2)DataModel--实体类型中,选择xx表,右键“在关系图中显示”。在图中的字段右键“转换到枚举”,然后定义即可。

建议:但是这样定义比较麻烦,可以先自定义枚举类型,然后进行引用。
这样的好处是:1.当删除数据模型时,枚举定义还在,只需重新添加枚举类型引用即可!
2.以后修改,更加灵活。

引用方法:

勾选“引用外部类型”,添加“命名空间.枚举类型名”,并还要在“枚举类型名”上添加“枚举类型名”即可。
(此处有Bug,当枚举类型已使用过,不能再重复使用,需要重新创建并改名!)

说明:如果定义错误了,或者想修改:
1.不建议:先删除表,然后右键“从数据库更新模型”即可恢复原来的表。(杀鸡用了牛刀了)
2.建议方法:字段属性--类型,改为原来的类型,如Byte。并删除模型浏览器中对应的枚举类型。

3)然后,编译通过即可。

说明:在模型浏览器中,表右键--“表映射”,可查看字段映射后的对应类型。

注意:建议模型创建以后,只更新数据模型,如果删除数据模型,重新建立时还需要重新添加引用!!


命名空间:

DataService.DataDomain.StatusType
DataService.DataDomain.ImageType


4、数据模型的使用:

using (DataEntities entities = new DataEntities())
{
s_role item = new s_role();
item.role_id = Guid.NewGuid();
item.role_name = "管理员";

entities.s_role.Add(item);
entities.SaveChanges();
}

数据库用户:

5、常见问题:

问题1、指定的架构无效。错误:
找不到概念类型“DataModel.ChildStatusType”的对应对象层类型。
以下信息对于解决上一个错误可能很有用:
CLR 枚举类型的基础类型与 EDM 枚举类型的基础类型不匹配。

解决方法:枚举类型数据结构与DB数据类型不一致,枚举定义添加基类byte等。如下

public enum StatusType : byte
{
NoProcess = 0,
Processing,
Processed,
}


问题2、连接本地DB正确,连接远程DB报错:

由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从
ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .NET
Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪日志。

解决问题:在远程DB上创建访问用户并分配权限即可。

 

你可能感兴趣的:(EF实体框架创建方法)