Tag: entity framework

从entity framework中的实体获取DbContext

在Visual Studio中的调试会话中,我深入到Business层中的某个位置,试图找出实体在尝试持久化更改时表现奇怪的原因。 在调用堆栈中此处获取对此实体所属的DbContext的引用确实很有帮助。 即,看看这个实体的状态是什么(Unchanged,Modified等)。 所以我正在寻找这样的辅助方法: var db_context = DbContextHelpers.GetDbContext(entity); // after that I could do something like this var state = db_context.Entry(entity); 我可以在调试期间在立即窗口中使用这些东西。 任何建议? 额外的笔记 实体必须知道某处的DbContext ,因为它用于延迟加载导航属性?

如何从SQL Server 2008错误代码中识别主键重复?

我想知道如何从C#中的SQL Server错误代码中识别主键重复错误。 作为一个例子,我有一个C#表单将数据输入到SQL Server数据库中,当数据输入时发生错误时,如何从exception中识别出错误的原因?

来自sql查询执行entity framework的匿名类型结果

我使用entity framework5.0与.net框架4.0代码的第一种方法。 现在我知道我可以通过以下方式在entity framework中运行原始sql var students = Context.Database.SqlQuery(“select * from student”).ToList(); 它工作得很好,但我想要的是返回匿名结果。 例如,我只想要学生表中的特定列,如下所示 var students = Context.Database.SqlQuery(“select FirstName from student”).ToList(); 它不起作用。 它给了例外 数据读取器与指定的“MyApp.DataContext.Student”不兼容。 类型为“StudentId”的成员在数据读取器中没有具有相同名称的相应列。 所以我尝试过dynamic类型 var students = Context.Database.SqlQuery(“select FirstName from student”).ToList(); 它也没有用,它返回一个空对象。 没有可用的数据。 有没有办法从动态SQL查询中获取匿名类型结果?

过滤包括LINQ和entity framework中的项目

我目前在我的应用程序中有这个LINQ / EF代码: var rootCategoryItem = DatabaseContext.Categories .Include(“SubCategories”) .OrderBy(c => c.CategoryOrder) .Single(c => c.CategoryId == 1); 我知道在EF中你不能过滤包含的项目,我可以编写一些LINQ代码来过滤掉不需要的子类别……但是LINQ代码被转换为一个非常不优化的可怕的SQL。 我还可以编写一个存储过程来执行此操作(并编写比LINQ更好的查询),但我真的想使用纯EF。 所以我留下了两个选项(除非有人可以看到其他选项)。 第一个是遍历子类别,删除不需要的子类别: var subCategoriesToFilter = rootCategoryItem.SubCategories.ToList(); for (int i = 0; i < subCategoriesToFilter.Count; i++) { if (subCategoriesToFilter[i].Deleted) rootCategoryItem.SubCategories.Remove(subCategoriesToFilter[i]); } 第二种选择是在我看来这样做: @foreach (var categoryitem in Model.SubCategories.OrderBy(c => c.CategoryOrder)) { @if(!Model.Deleted) { @Model.CategoryName } } 在2中,哪一个是最好的选择? 或者我还有另一种选择吗? 解决方案 […]

entity framework代码优先:如何在两个表之间创建一对多和一对一的关系?

这是我的模型: public class Customer { public int ID { get; set; } public int MailingAddressID { get; set; } public virtual Address MailingAddress { get; set; } public virtual ICollection Addresses { get; set; } } public class Address { public int ID { get; set; } public int CustomerID { get; set; } public […]

update-database:“建立与SQL Server的连接时发生与网络相关或特定于实例的错误”

我有一个简单的C#项目。 这是我的web.config中的数据库连接字符串: 我已经确定这个连接正常。 我可以通过此连接从Visual Studio连接到我的数据库,我也可以看到表和数据。 当我想用update-database更新我update-database ,会发生以下错误: 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 validation实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 – 查找指定的服务器/实例时出错) 我卸载了Entity Framework,然后再次安装它。 没有改变。

属性“name”是对象的关键信息的一部分,无法修改。 entity framework

我正在尝试更新记录,并在context.SaveChanges();之后收到此错误消息context.SaveChanges(); 属性“name”是对象的关键信息的一部分,无法修改。 以下是更新function的代码: if (context.EAT_SourceNames.Any(e => e.name == newSourceName)) { MessageBox.Show(“Name already exists in the Database”); } else { var nameToUpdate = context.EAT_SourceNames.SingleOrDefault(e => e.name == sourceName.name); if (nameToUpdate != null) { nameToUpdate.name = newSourceName; context.SaveChanges(); RefreshDGVs(); } } 我的SourceNames类如下所示: public EAT_SourceNames() { this.EAT_Sources = new ObservableListSource(); } public string name { get; set; } […]

由于已使用MVC 4处理了DbContext,因此无法完成操作

我知道这个问题被问过这么多次。 我已阅读并实施了所有解决方案但未获得成功。 当我使用EF从数据库检索数据并在View上使用此模型后与模型绑定时,我收到此错误。 我的控制器代码是 using System.Linq; using System.Web.Mvc; using JsonRenderingMvcApplication.Models; namespace JsonRenderingMvcApplication.Controllers { public class PublisherController : Controller { public ActionResult Index() { PublisherModel model = new PublisherModel(); using (DAL.DevelopmentEntities context = new DAL.DevelopmentEntities()) { model.PublisherList = context.Publishers.Select(x => new SelectListItem() { Text = x.Name, Value = x.Id.ToString() }); ; } return View(model); } } […]

多对多的自我引用关系

我是EF的新手。 我遇到了创建多对多自引用关系的问题。 我尝试使用以下解决方案: entity framework核心:与同一实体的多对多关系 我的实体: public class WordEntity { public long Id { get; set; } public string Name { get; set; } public string Json { get; set; } public virtual List Sinonyms { get; set; } } public class WordSinonymEntity { public long WordId { get; set; } public virtual WordEntity Word […]

按字符串生成EF orderby Expression

我想通过字符串参数生成表达式,一些代码如: private Expression<Func> Generate(string orderby) { switch (orderby) { case “Time”: return t => t.Time; case “Money”: return t => t.RewardMoney; default: return t => t.Id; } } 然后叫它: _context.Items.OrderBy(Generate(“Money”)); 但它无法编译! 我将T改为对象。 private Expression<Func> Generate(string orderby) 然后它可以编译,但它不起作用。 System.NotSupportedException:无法将类型“System.Int32”强制转换为“System.Object”类型。 LINQ to Entities仅支持转换EDM原语或枚举类型。