1. 在使用数据迁移的过程中,如果手工删除了本地数据库之后,再次尝试连接被删除的数据库,会有以下提示:

System.Data.SqlClient.SqlException (0x80131904): Cannot open database "ContosoUniversity3" requested by the login. The login failed.

修复方法:打开SQL Server Management Studio,连接上被删除数据库所在的引擎(一般是LocalDB),在Tool中再删除一次显示在列表中的数据库,会提示无法删除,文件不存在等等过,

不必管它,断开连接,再次连接,可以看到数据库已经不在列表当中,现在数据迁移可以再次使用被删除的数据库名

如果没有SSMS,可以执行‘sqllocaldb.exe stop v11.0’和‘sqllocaldb.exe delete v11.0’(未实测),以上知识来自下面的提问:

http://stackoverflow.com/questions/21592062/ef6-migrations-localdb-update-database-login-failed

http://stackoverflow.com/questions/13275054/ef5-cannot-attach-the-file-0-as-database-1/16339164#16339164

2. 使用数据迁移的流程:

来自:http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/migrations-and-deployment-with-the-entity-framework-in-an-asp-net-mvc-application

注释掉Web.Config当中的数据初始化器的代码

修改连接字符串,使用新数据库

执行enable-migrations

执行add-migration XXXXXX(为迁移生成快照,同时生成迁移用的文件,可以修改生成的文件)

执行update-database(更新改动到数据库当中)

3. 使用代码执行迁移,查看迁移生成的代码

https://romiller.com/2012/02/09/running-scripting-migrations-from-code/

var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null); 4.EF在转换成JsonResult时遇到无限循环的解决办法
序列化类型为“System.Data.Entity.DynamicProxies.Photos_1F5D250F2735650E782711718DE2EFF2BBEA68EE8F6C5A1CF253FAABD0681F7B”的对象时检测到循环引用。
来自:http://www.cnblogs.com/gmxq/p/4921974.html
干净优雅的好方法
摘抄于下:
public class MyJsonResult : JsonResult
{
public JsonSerializerSettings Settings { get; private set; } public MyJsonResult()
{
Settings = new JsonSerializerSettings
{
         //这句是解决问题的关键,也就是json.net官方给出的解决配置选项.
          ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
} public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
throw new InvalidOperationException("JSON GET is not allowed");
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
if (this.ContentEncoding != null)
response.ContentEncoding = this.ContentEncoding;
if (this.Data == null)
return;
var scriptSerializer = JsonSerializer.Create(this.Settings);
using (var sw = new StringWriter())
{
scriptSerializer.Serialize(sw, this.Data);
response.Write(sw.ToString());
}
}
}
public class BaseController : Controller
{
protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new MyJsonResult
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior };
} }

当成,自己组合匿名对象也是可以的,比如来自SO的一个代码片段:

http://stackoverflow.com/questions/16949520/circular-reference-detected-exception-while-serializing-object-to-json

The solution:

Return the data (properties) you need as anonymous objects.

A code example:

In this case I needed the 3 latest tickets, based on "Date Scheduled". But also needed several properties stored in related entities.

var tickets =
context.TicketDetails
.Where(t => t.DateScheduled >= DateTime.Now)
.OrderBy(t => t.DateScheduled)
.Take(3)
.Include(t => t.Ticket)
.Include(t => t.Ticket.Feature)
.Include(t => t.Ticket.Feature.Property)
.AsEnumerable()
.Select(
t =>
new {
ID = t.Ticket.ID,
Address = t.Ticket.Feature.Property.Address,
Subject = t.Ticket.Subject,
DateScheduled = String.Format("{0:MMMM dd, yyyy}", t.DateScheduled)
}
);
同样是在那篇帖子里面有回复AsNoTracking可以的,不过我测试的结果是不行,也许是6.1.3的版本和之前5.X的在这方面有区别?
规避json序列化的时候直接序列化该t_saleform对象,改为序列化其它没有这种映射关系的对象。代码如下:
   1: public JsonResult GetSaleByNo(string id)
   2: {
   3:     SaleMvcUI.Helper.saleDBEntities saleDB = new Helper.saleDBEntities();
   4:  
   5:     var saleF = (from sf in saleDB.t_saleform
   6:                  where sf.f_saleform_no == id
   7:                  select new
   8:                  {
   9:                      f_saleform_no = sf.f_saleform_no,
  10:                      f_saleform_date = sf.f_saleform_date,
  11:                      f_customer = sf.f_customer,
  12:                      f_sales = sf.f_sales,
  13:                      f_remark = sf.f_remark
  14:                  }).First();
  15:     //此处为了好转换日期格式,多定义了一个临时变量。
  16:     var tm = new{
  17:                      f_saleform_no = saleF.f_saleform_no,
  18:                      f_saleform_date = saleF.f_saleform_date.ToString("yyyy-MM-dd"),
  19:                      f_customer = saleF.f_customer,
  20:                      f_sales = saleF.f_sales,
  21:                      f_remark = saleF.f_remark
  22:                  };
  23:     return this.Json(tm, JsonRequestBehavior.AllowGet);
  24: }
 

EF问题集合的更多相关文章

  1. ASP.NET EF 延迟加载,导航属性延迟加载

    ASP.NET EF 延迟加载,导航属性延迟加载   EF(EntityFramework)原理:属于ORM的一种实现 通过edmx文件来查看三部分:概念模型,数据模型,映射关系,上下文DbConte ...

  2. C#中集合接口关系笔记

    IEnumerable IEnumerable接口是所有集合类型的祖宗接口,其作用相当于Object类型之于其它类型.如果某个类型实现了IEnumerable接口,就意味着它可以被迭代访问,也就可以称 ...

  3. (转载)哈夫曼编码(Huffman)

    转载自:click here 1.哈夫曼编码的起源: 哈夫曼编码是 1952 年由 David A. Huffman 提出的一种无损数据压缩的编码算法.哈夫曼编码先统计出每种字母在字符串里出现的频率, ...

  4. Hive函数大全

    一.关系运算: 1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive> select 1 from l ...

  5. Hive 字符串操作[转]

    1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') f ...

  6. MVC - 11(上).DTO

    1.重要:javaScriptSerializer 无法识别被序列化的对象里各种属性是否存在  循环依赖 (System,Web.Script.Serialization.JavaScriptSeri ...

  7. hive支持sql大全

    转自:http://www.aboutyun.com/thread-7316-1-1.html 一.关系运算:1. 等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B ...

  8. hive字符串函数

    1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') f ...

  9. hive支持sql大全(收藏版)

    hive操作数据库还是比较方便的,因此才会有hbase与hive整合.下面我们hive的强大功能吧.为了增强阅读性,下面提几个问题: 1.hive支持哪些运算符? 2.hive是否支持左右连接? 3. ...

随机推荐

  1. TCP和UDP的区别以及各自应用

    TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是运输层的两个主要协议,均是互联网的正式标准. ...

  2. jmeter-集合点---学习笔记

    集合点: 简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟 ...

  3. HBuilder的常用快捷键

    Ctrl + d 删除整行内容 Ctrl + Shift +R 复制当前行到下一行 Ctrl + Shift +D 重新编辑 Ctrl + 方向键 当前行整行内容上移或下移 Alt + ↓ 跳转到下一 ...

  4. (转)python学习链接

    原文:http://www.cnblogs.com/spykids/category/782491.html http://www.cnblogs.com/alex3714/category/7707 ...

  5. linux shell 将多行文件转换为一行

    说实话,虽然对shell编程包括awk有所了解,但是对sed的多行与一行的处理还是不甚理解,在网上搜罗了一篇文章觉得还不错,记录一下: 今天一个工程师问我,怎么将一个文件中的多行转换成一行. 我给出了 ...

  6. linux程序分析工具介绍(一)—-”/proc”

    写在最前面:在开始本文之前,笔者认为先有必要介绍一下linux下的man,如果读者手头用linux系统,直接在终端输入man man便可以看到详细的说明,我在这里简单的总结一下,man命令是用来查看l ...

  7. .net iis6中配置伪静态

    1.右键点击 要设置网站的网站 2.属性 ——>主目录 ——>配置——> 3.如右侧窗口,找到 .aspx 扩展名——>编辑——>复制 可执行文件的路径——>关闭 ...

  8. 设计模式之工厂模式详细读后感TT!(五)

    一如既往:原文 工厂方法(factory method)模式的意义是定义一个创建产品对象的工厂接口, 将实际创建工作推迟到子类当中. 核心工厂的创建, 这样核心类成为一个抽象工厂角色, 仅仅复制工厂子 ...

  9. css3之移动平台资源

    随着移动端越来越普及,前端技术也是百花齐放,但目前移动平台的技术已经趋向于成熟,记得刚实习的时候就是接触的移动端,但现在2年多来,期间遇到了很多莫名其妙的问题,见证了手机用户量的突飞猛进,兴喜的是更多 ...

  10. canvas的arcTo API