Tag: entity framework 4

使用entity framework使用存储库和单元工作模式正确处置?

干杯!我对使用工作单元和存储库有些怀疑。 特别是来自Entity Framework的子上下文的角色。 我已经搜索了很多关于这个主题的信息,但是我发现只是不同类型的使用模式,我很困惑,我无法理解主要思考。 1.我应该在哪里实现处置和储蓄? – 它是否在DbContext的inheritance类中正确实现了Disposable? 之后在存储库和工作单元中实现还是只在Uni fo工作中实现? – 把方法保存在工作单元或存储库中? 我的存储库将是Generic我的代码在架构师风格和其他细节方面是否正确?请告诉我的想法是否错误。 interface IRepository : IDisposable { void Create(); void Delete(); void Update(); void Get(); T getSomeByExpression() …Some another costum operations …should I remember about Save here? } class Repository : IRepository { SomeContext context = new SomeContext(); …Using using(context = new SomeContext()){} in functions?? […]

搜索实体的所有字段

我正在尝试在客户数据库上实现“多function框”搜索,其中单个查询应尝试匹配客户的任何属性。 这里有一些示例数据来说明我想要实现的目标: FirstName | LastName | PhoneNumber | ZipCode | … ————————————————– Mary | Jane | 12345 | 98765 | … Jane | Fonda | 54321 | 66666 | … Billy | Kid | 23455 | 12345 | … 如果查询是”Jane” ,我希望返回第1行以及第2行。 对12345的查询将产生行#1和#3。 现在,我的代码看起来非常像这样: IEnumerable searchResult = context.Customer.Where( c => c.FirstName == query || c.LastName == […]

如何实现通用的RepositoryFactory?

我正在尝试实现一个通用存储库。 这是我到目前为止所得到的…… public interface IRepositoryFactory { IRepository RepositoryOf() where T : class; } public class EntityFrameworkRepositoryFactory : IRepositoryFactory { private readonly IWindsorContainer _container; public EntityFrameworkRepositoryFactory(IWindsorContainer container) { _container = container; } public IRepository RepositoryOf() where T : class { var repository = _container.Resolve<IRepository>(); return repository; } } RepositoryFactory由我的工作单元实现使用 public interface IUnitOfWork : IDisposable { IRepository […]

当Ninject用作依赖项解析器时,如何在asp.net mvc3 App中处理DbContext(或对象)

对于这个Demo,我创建了一个虚假的Database +存储库,如下所示 假Db +存储库 public interface IDemoRepository { string[] GetUsers(); } public class DemoRepository : IDemoRepository, IDisposable { public string[] GetUsers() { string[] Users = { “Robert”,”Linda”,”Jack”}; return Users; } public void Dispose() { //do nothing throw new Exception(“Disposed is called”); } } 我的控制器看起来如此 public class TestController:Controller { protected IDemoRepository _repository; public BaseController(IDemoRepository repository) { […]

EF4如何以多对多关系公开连接表

说我有以下表格: Essence,EssenceSet和Essence2EssenceSet,其中Essence2EssenceSet仅包含前2个表的ID以形成M:M关系。 在EF中,因为Essence2EssenceSet没有其他字段,所以它不会在模型中公开。 我发现当我已经拥有创建记录所需的2个ID但不一定加载了Essence和EssenceSet记录时(仅仅是它们的ID),这使得很难将记录插入到该表中 有没有办法告诉EF不以这种方式建模并始终包含连接表? 或者我错过了更简单的方法来创建这些连接表记录?

entity framework4每个层次结构表 – 如何定义儿童的导航属性?

我目前使用Table Per Type(TPT)实现了Entity Framework 4.0模型,但是存在一些性能问题(许多LOJ / CASE语句),以及两个特定域区域之间的问题映射(多个到 – 许多)。 我决定尝试TPH。 我有一个名为“ Location ”的实体,它是抽象的 ,是所有其他实体的基础。 然后我有“ 国家 ”,“ 城市 ”,“ 州 ”,“ 街道 ”等,这些都来自位置。 “ LocationType ”是判别者 。 该部分工作正常,但我在尝试为派生类型定义导航属性时遇到问题。 例如,“ 州 ”有一个“ 国家 ”,所以我应该能够这样做: var state = _ctx.Locations.OfType().Include(“Country”).First(); var countryForState = state.Country; 但这需要在“州”派生实体上称为“国家”的导航属性。 我该怎么做呢? 当我从数据库生成模型时,我有一个表,所有FK指向同一个表中的记录: (注意:我在DB中手动创建了这些FK)。 但是FK被定位为“ 位置 ”实体上的导航,那么如何将这些导航属性下移到派生实体? 我不能复制+粘贴导航,我不能“创建新的导航属性”,因为它不会让我定义开始/结束角色。 我们如何做到这一点? 如果我们可以先建立模型,或者我们必须从数据库开始,修复模型然后重新生成数据库,那么TPH也不清楚。 我还没有在互联网上找到一个关于如何使用TPH定义儿童导航的好例子。 注意: 我不想先执行代码 。 […]

entity framework。所有方法链接

这两种查询上下文的方式有什么区别吗? Firm firm = base.context.Firms .Where(f => f.SomeId == someId) .Where(f => f.AnotherId == anotherId) .FirstOrDefault(); Firm firm = base.context.Firms .Where(f => f.SomeId == someId && f.AnotherId == anotherId) .FirstOrDefault(); 似乎链接完全可以完成AND条件。 我不相信你可以链接OR语句。 是否有理由更喜欢一个,或者一个更好/更有效的情况?

EF4:LINQ 2实体查询在C#中工作,但在VB中不工作

[编辑:我在下面留下了原始问题,有一些更多的上下文和代码来重现问题。 下面的简短版本包含问题的本质] 简短版本:下面的查询抛出一个System.NotSupportedException:“无法将类型’System.Linq.IOrderedQueryable 1′ to type ‘System.Linq.IQueryable强制转换1’ to type ‘System.Linq.IQueryable to Entities仅支持转换实体数据模型基元类型。” 仅在VB.Net版本中引发exception。 转换为C#时,不会引发exception。 Dim doesThisCrash = From outerOrder In orders Where outerOrder.ProductId = (From p In products Join o In orders On p.Id Equals o.ProductId Order By p.Id Select p.Id).FirstOrDefault() Select outerOrder doesThisCrash.ToList() 因此,为了使其崩溃,似乎我们需要一个子查询,其中原始ObjectSet(订单)与另一个ObjectSet(产品)连接,并且有序。 仅使用订单或产品集时,不会发生崩溃。 当省略Order By时,也没有崩溃。 我倾向于认为这是一个(VB.Net)编译器错误,除非有一些明显我在这里忽略的东西…… 现在我的问题仍然存在: 为什么一个看似完全相同的查询在C#中工作但在VB中不起作用? 这个查询可以在VB.Net中工作吗? [/编辑] 可选,更长版本(原始问题): 我的域看起来非常不同,但我将问题转换为更简单的版本,具有以下实体(注意:我实际上使用.edmx设计器定义了这些,因此这是一个简化版本): […]

在entity framework中处置对象上下文4

我有一个实体类,它是从我的数据库模型自动生成的。 该类inheritance了ObjectContext,它inheritance了IDisposable。 我创建了一个存储库,其中包含各种方法,这些方法使用实体对象的单个实例与数据库进行交互。 自动生成的类 public partial class DevEntities : ObjectContext { public const string ConnectionString = “name=DevEntities”; public const string ContainerName = “DevEntities”; 存储库类 DevEntities db = new DevEntities(); public Customer GetCustomerByID(int id) { var customers = db.Customers.FirstOrDefault(c => c.CustomerId == id); return customers; } public Customer GetCustomerByPasswordUsername(string email, string password) { var customers = […]

分层架构中的entity framework

我正在使用entity framework的分层架构。 这是我到目前为止所提出的(所有项目除了UI都是类库): 实体 :POCO实体。 完全坚持无知。 没有参考其他项目。 由Microsoft的ADO.Net POCO实体生成器生成。 DAL :带有上下文类的EDMX(实体模型)文件。 (t4生成)。 参考文献: Entities BLL :业务逻辑层。 将在此层上实现存储库模式。 参考文献: Entities , DAL 。 这是填充objectcontext的地方: var ctx=new DAL.MyDBEntities(); UI :表示层:ASP.NET网站。 参考: Entities , BLL +配置文件中实体的连接字符串条目(问题#2)。 现在我的三个问题: 我的图层处理方法是否正确? 在我的UI中,我按如下方式访问BLL: var customerRep = new BLL.CustomerRepository(); var Customer = customerRep.GetByID(myCustomerID); 问题是我必须在我的UI的web.config / app.config中定义实体连接字符串,否则我会得到一个运行时exception。 IS定义UI中的实体连接字符串会破坏图层的区别吗? 或者它是否可以在多层分层架构中访问。 我应该采取任何额外的步骤来执行chage跟踪,延迟加载等(通过等我的意思是entity framework在传统的1项目,非POCO代码生成中涵盖的function)? 感谢并为这个冗长的问题道歉。