Tag: entity framework

这是DTO的正确使用吗?

我正在编写一个控制台应用程序,它可以从存储过程记录集中进行大量数据检索。 对于我正在使用的每个记录集类型,我有一个使用EF和自定义复杂类型的Repository来检索数据: public interface IBalanceSheetRepository { IEnumerable GetBalanceSheetRecords(); } public class BalanceSheetRepository : IBalanceSheetRepository { DBContext _context; … public IEnumerable GetBalanceSheetRecords() { ObjectResult results = _context.GetBalanceSheet(); return results.Select(CreateBalanceSheetDTOFromDAO); } private static BalanceSheetRecordDTO CreateBalanceSheetDTOFromDAO(BalanceSheetRecord dao) { return new BalanceSheetRecordDTO { … }; } } 这里, BalanceSheetRecord是我在设计器中创建的复杂数据类型。 我创建了一个DTO以避免耦合,因为BLL不应该知道BalanceSheetRecord类型。 这是我的问题:由于DTO类型用于存储库接口的方法签名,并且由于我的BLL最终将使用存储库并返回DTO的集合,因此它似乎是一个跨领域的问题。 因此,我让DTO与repo接口一起生活在一个单独的“Infrastructure”组件中。 这是我努力实现的良好做法,还是我在某个地方转错了? 另外:在我的存储库中新建数据上下文是不好的做法? 当两个组件都属于DAL时,是否有一定数量的耦合? 我想使用DI,但是对于替换TestBalanceSheetRepository的repo的DBContext实现似乎更有用。

LINQ是否可以动态添加where子句

我想用不同的密钥搜索我的数据库。 根据输入,10键可能有1个键。 有没有办法动态地向我的Linq查询添加OR / AND子句? keys[k] // I have my keys in this array var feedList = (from feed in ctx.Feed where feed.content.contains(keys[0]) && feed.content.contains(keys[1]) && … // continues with the keys.length select new { FeedId = feed.DuyuruId, FeedTitle = feed.FeedTitle, FeedContent = feed.FeedContents, FeedAuthor = user.UserName + ” ” +User.UserSurname }

更改ASP.NET标识以使用现有数据库

我正在使用ASP.NET MVC 5和Database-First工作流程。 我已经在我现有的数据库中创建了身份表( AspNetUsers , AspNetRoles等),但是我在使注册和登录function正常工作时遇到了问题。 这是IdentityModels.cs类 public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base(“MyConnectionString”) // I use “MyConnectionString” instead of “DefaultConnection” { } 这是来自web.config的EF连接字符串的样子 为了更好地衡量,这里是从edmx生成的上下文类 public partial class MyConnectionString : DbContext { public MyConnectionString() : base(“name=MyConnectionString”) { } 对我来说似乎都很好,它应该能够在数据库中创建用户但是我在登录或尝试分别注册时收到以下错误: 登录: 实体类型ApplicationUser不是当前上下文的模型的一部分 第73行:var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout:false); exception详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分。 注册: 实体类型ApplicationUser不是当前上下文的模型的一部分 第155行:var result […]

Entity Framework如何管理映射查询结果为匿名类型?

请考虑以下示例LINQ to entity查询 from history in entities.foreignuserhistory select new { history.displayname, login=history.username, history.foreignuserid } ToTraceString()返回字符串如下: SELECT “Extent1″.”foreignuserid” AS “foreignuserid”, “Extent1″.”displayname” AS “displayname”, “Extent1″.”username” AS “username” FROM “integration”.”foreignuserhistory” AS “Extent1” 对我来说问题是列与查询的顺序不同,并且不会在示例中使用login别名。 Entity Framework在哪里存储匿名类型的映射信息? 背景:我将使用LINQ to entity进行大规模操作,使用select操作开发insert。 更新:使用select进行插入并不困难,除了未知列到属性映射算法。 可以使用元数据获取目标ObjectSet表名和列名,构建INSERT INTO tableName (column_name1, …) sql语句字符串,然后附加一些ObjectQuery.ToTraceString SELECT语句。 然后使用((EntityConnection)ObjectContext.Connection).StoreConnection和填充命令来自ObjectQuery的参数创建带有结果文本的DbCommand 。 所以问题是在插入和选择的记录中找到匹配的列顺序。

在.NET中捕获存储过程打印输出(不同型号!)

基本上, 这个问题有所不同…… 是否可以使用entity framework从.NET中的TSQL存储过程捕获打印输出? 另一个问题的解决方案对我不起作用。 它适用于System.Data.SqlClient中的连接类型,但我使用System.Data.EntityClient中没有InfoMessage事件的连接类型。 (当然,我可以根据实体连接设置创建一个SQL连接,但更喜欢直接这样做。)

如何在不使用对话框的情况下在C#项目中为MySQL数据库设置连接字符串?

注意:显然,MySQL连接器安装未在对话框中自动显示以添加数据源的原因是因为 Visual 2008 Express Edition 不允许在Visual Studio IDE中进行“第三方集成”。 因此,这使得手动设置数据源变得更加重要,因为MySQL连接器中的集成工具不存在。 我的目标是使用Entity Framework(ADO.NET实体数据模型)建立与MySQL数据库的连接。 我对所有的向导和对话框感到沮丧,我仍然无法找到我正在寻找的东西。 这就是我到目前为止所做的:我刚刚在我的机器上安装了MySQL .NET Connector v6.1.3(据我所知,它已经正确安装。它显示在控制面板的“添加/删除程序”中)。 在Visual Studio(带有SP1的entity framework版本的Visual C#2008 Express Edition SP1)中,单击以添加对项目的引用,单击“ADO.NET实体数据模型”,这会将我带到一个屏幕,询问“该模型应该包含什么?“ 我选择“从数据库生成”,然后单击“下一步”。 这个屏幕问我应该使用哪种数据连接。 我点击“新建连接”并获得如下所示的屏幕: 我刚刚安装的ADO.NET MySQL Connector的选项在哪里? 我知道在哪里可以找到 MySQL 的连接字符串 ,但我无法弄清楚如何将它放入我的应用程序以便Visual Studio识别它,使用ADO.NET连接器,并允许我选择该连接来创建实体模型。 如何实现这一目标?

entity framework在重建时插入初始数据

我正在使用entity framework代码优先使用MySQL数据源。 我已经定义了ContactType.cs ,如下所示: public class ContactType { [Key] public int ContactTypeId { get; set; } [Required, StringLength(30)] public string DisplayName { get; set; } } 我的问题是,在重建数据库之后,我如何让EF将一些联系类型插入(没有SQL)数据库中。 通常,DB会重建为空白架构,但我想添加联系人类型,如(家庭,移动,办公室,传真)。

entity framework和事务隔离级别

我正在使用Entity Framework 4.0。 现在我需要限制对表的访问,当我从中读取或写入它时。 可能是关于事务隔离级别的。 我怎么做? 更新 这就是我所拥有的 using (var db = new MyDb()) { using (TransactionScope scope = new TransactionScope()) { var item = db.MyItems.Single(x => x.Id == 5); item.Price = 12; db.SaveChanges(); scope.Complete(); } } 但是,当我在内部任何一行using (TransactionScope scope断点时using (TransactionScope scope ,当我停在那里然后我转到Sql Server Management Studio并从一个在内部使用的表中进行选择查询(甚至更新!))事务,我出于某种原因没有收到错误。但为什么呢?它不能让我在执行事务时读取数据。

我可以在Entity Framework的Where方法中使用自定义委托方法吗?

Where(this IQueryable source, Expression<Func> predicate); 我将参数传递给Where方法,如下所示: f => f.Id > 4 。 我可以传递委托方法而不是f.Id > 4吗?

执行该命令需要一个开放且可用的连接。 连接的当前状态被破坏。

在qa中使用一些后,我们得到以下错误 Execution of the command requires an open and available connection. The connection’s current state is broken. 我们正在使用EntityFramework的单例实例 SOF建议: 服务器关闭导致无效操作exception的EF恢复 1)偶尔创建一个新的ContectObject实例 2)配置池连接数更高 解决这个问题的最佳做法是什么? 我认为为每个Dal操作创建一个新的contectObject是浪费的