如何分离出EF的三份结构定义文件
2012-12-18 00:36
246 查看
且看一个念念不忘的故事:三个月前进入到一个外包项目,一切以解决问题为先导,而不管你用什么技术或工具。于是采用了EF来管理不超过10个表的小功能。确实是啥sql语句都没写,直接linq to entity,爽歪歪。遇上表改动大,则全部删掉edmx重来,小小改动则表和实体定义同步手写改。最后觉得不爽了,又把这部分Dal移出去成一个单独的dll,这时候遇上生手会遇上的加载元数据失败的问题,也就是找不到那三份文件了,因为默认是嵌入到dll作为资源。然后appconfig里面的链接字符串也指定了路径,一旦移动edmx目录,则会报错。这时候采取的办法是直接删掉edmx,再生成得到一份app.confg,把这份文件里面的链接字符串copy覆盖到原来工程里的链接。OK搞定。看EF就是这么简单的样子。最后,项目集成了,这个应用要被集成到sharepoint里面去,sharepoint这玩意需要所有引用dll强命名,并且被安装到GAC,我不明白sharepoint为什么需要这么做,做sharepoint这部分的是来自微软的同事,至今都没去研究sharepoint,精力有限,当是就这一点,以及加另外一点它要求我写的用户控件还要按一定的格式去改才能跑在sharepoint里面,我就不喜欢它了。回到原点,我和另外一个负责集成的同事整整花了一个下午的时间都没搞定元数据加载失败的错误,尝试过n多方法,因为那个见鬼的环境不允许访问internet,查个东西要去另外一个房间的公共机器,你知道这让人出离愤怒。随后我离开了那个项目,离开了那个公司。但是心里一直在挂念这这个问题。
现在我稍微有点空闲了,然后老老实实每天一两章的开始看《Programming Entity Framework, 2nd Edition》,然后看到了分离三份文件的方法,下面是步骤:
1, edmx文件右键属性,设置生成操作为EntityDeploy。
2, 双击edmx,打开模型视图,在空白处右键选择模型浏览器在紧靠edmx下面类似XXXXModel的文件上面右键属性,设置元数据项目处理为输出到目录,然后你会看到链接字符串已经指向到bin,类似metadata=~/bin/Model1.csdl|~/bin/Model1.ssdl|~/bin/Model1.msl;provider=System.Data.SqlClient;providerconnectionstring="DataSource=WUSONG-PC\SQL2008;Initial Catalog=BreakAway;Integrated Security=True;MultipleActiveResultSets=True"
通过以上步骤,三份结构文件就已经分离出来,随你安放了。不用劳烦资源找不到的问题。
3,完全自定义连接实例:
app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BreakAwayEntities" connectionString="provider=System.Data.SqlClient;provider connection string="Data Source=WUSONG-PC\SQL2008;Initial Catalog=BreakAway;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
var connectionString = ConfigurationManager.ConnectionStrings["BreakAwayEntities"].ConnectionString;
var connectionStringBuilder = new EntityConnectionStringBuilder(connectionString);
connectionStringBuilder.Metadata = @"d:\BAEntities.csdl|d:\BAEntities.ssdl|d:\BAEntities.msl";
var context = new BreakAwayEntities(connectionStringBuilder.ConnectionString);
var address = context.Address.ToList();
foreach (Address addr in address)
{
Console.WriteLine(addr.City);
}
Console.Read();
现在我稍微有点空闲了,然后老老实实每天一两章的开始看《Programming Entity Framework, 2nd Edition》,然后看到了分离三份文件的方法,下面是步骤:
1, edmx文件右键属性,设置生成操作为EntityDeploy。
2, 双击edmx,打开模型视图,在空白处右键选择模型浏览器在紧靠edmx下面类似XXXXModel的文件上面右键属性,设置元数据项目处理为输出到目录,然后你会看到链接字符串已经指向到bin,类似metadata=~/bin/Model1.csdl|~/bin/Model1.ssdl|~/bin/Model1.msl;provider=System.Data.SqlClient;providerconnectionstring="DataSource=WUSONG-PC\SQL2008;Initial Catalog=BreakAway;Integrated Security=True;MultipleActiveResultSets=True"
通过以上步骤,三份结构文件就已经分离出来,随你安放了。不用劳烦资源找不到的问题。
3,完全自定义连接实例:
app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="BreakAwayEntities" connectionString="provider=System.Data.SqlClient;provider connection string="Data Source=WUSONG-PC\SQL2008;Initial Catalog=BreakAway;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
var connectionString = ConfigurationManager.ConnectionStrings["BreakAwayEntities"].ConnectionString;
var connectionStringBuilder = new EntityConnectionStringBuilder(connectionString);
connectionStringBuilder.Metadata = @"d:\BAEntities.csdl|d:\BAEntities.ssdl|d:\BAEntities.msl";
var context = new BreakAwayEntities(connectionStringBuilder.ConnectionString);
var address = context.Address.ToList();
foreach (Address addr in address)
{
Console.WriteLine(addr.City);
}
Console.Read();
相关文章推荐
- 分离文件中 没有该如何定义样式表?
- 从Discuz!NT项目文件结构看如何给系统框架分层和类库分文件夹
- mingw gcc的头文件存在结构定义错误!!
- 如何使用 .jdb 文件手动更新 Symantec Endpoint Protection Manager 的病毒定义
- 如何使用opencv的c++接口来读取、写结构体数组到xml文件中
- android如何查看手机中的db文件,查看sqlite数据库的表结构
- 1.3 定义文件的结构
- SharePoint【Ribbon系列】-- 09.如何让用户定义的Ribbon引用外部Javascript文件
- caffe 实战系列:proto文件格式以及含义解析:如何定义网络,如何设置网络参数(以AlexNet为例)
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?
- 如何使PHP文件与HTML代码更好的分离
- 如何使用其他文件中定义的类Python
- xml schema 中如何定义类似Map的结构
- 如何使用GDB显示不同C文件中的同名结构体内容
- 如何解开各种结构的压缩文件
- 如何在C#中定义动态的数组结构啊??
- query的结构某字段如何在WEIBI上单独定义格式
- MySQL删除ibdata1后,如何通过.frm文件把表结构恢复过来
- C语言如何跨文件调用函数定义中声明的变量
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?