相关疑难解决方法(0)

错误:"指定的LINQ表达式包含对与不同上下文关联的查询的引用"

我收到LINQ查询标题中显示的错误,该查询包括来自两个不同edmx文件的两个表.这是查询:

var query = (from a in db1.Table1
           join b in db1.Table2 on a.Id equals b.Id
           orderby a.Status
           where b.Id == 1 && a.Status == "new"
           select new
           {
               Id = a.Id,
               CompanyId = (from c in db2.Company
                            where s.Id == a.Id
                            select
                            new { c.CompanyId })
           });
Run Code Online (Sandbox Code Playgroud)

db1并且db2是与两个不同的edmx文件关联的上下文.我怎样才能克服这个错误?

c# linq entity-framework edmx

58
推荐指数
1
解决办法
5万
查看次数

域驱动设计中有限上下文中的实体

我试图了解实体如何在多个有界上下文中运行.

给予公司员工.在(例如)人力资源上下文中,此人具有姓名,地址,工资参考编号和银行帐户.但在会计方面,所有相关的是工资参考编号和银行账户.

您是否在HR上下文中有Employee实体,SalariedEmployee在Accounting上下文中有Value-Type(例如)?

class Employee
{
    public BankAccount BankAcountDetails { get; set; }
    public string FullName { get; set; }
    public Address ResidentialAddress { get; set; }
    public string SalaryRef { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SalariedEmployee class(??):Employee的值类型

class SalariedEmployee
{
    public SalariedEmployee(string salaryRef, BankAccount bankAcountDetails)
    {
        ...
    }

    public string SalaryRef { get; }
    public BankAccount BankAcountDetails { get; }
}
Run Code Online (Sandbox Code Playgroud)

有界上下文中的HRService是否返回此信息?或者你在两种情况下都使用Employee类?

entity domain-driven-design value-type bounded-contexts

15
推荐指数
2
解决办法
7219
查看次数

EF Core:在 DbContext 对象中使用多个数据库架构?

我们有一个数据库,其中的表以多种模式组织,例如 Common.User 和 Product.Order。不同模式中也存在同名的表。

是否可以以某种方式使用此模式来组织 DBContext 中的 DbSet 对象?对我们来说最好的解决方案是访问用户对象,例如 dbcontext.Common.User。这可能吗?

一般来说,在 EF Core 中使用多个数据库架构的最佳策略是什么?

编辑:问题并不针对如何映射来自不同模式的表(entity.ToTable("User","Common"))。它是根据 DbContext 中的架构来组织映射表的。

c# database-schema entity-framework-core

11
推荐指数
0
解决办法
8120
查看次数

一个DbContext和多个数据库,EF代码优先

这是我的第一个问题,我知道在搜索之前我应该​​搜索一下,我确信我已经完成了搜索,但是我找不到合适的信息.

我使用代码优先的方法来实现我的Context和我的模型,所以我有一个简单的上下文,如:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public partial class MultipleContext : DbContext
{
    public MariaDBContext(string connection) : base(connection)
    {
        //Database.SetInitializer<MultipleDBContext>(new MariaDbInitializer());
    }
    public virtual DbSet<Test> Tests { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Test>().ToTable("test")
            .HasKey(e => e.ID);
    }
}
Run Code Online (Sandbox Code Playgroud)

和我的模特:

public partial class Test
{
    public int ID { get; set; }

    public string Name { get; set; }

    public string Family { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有两个connectionstrings如下:

<connectionStrings> 
    <add name="MariaDBContext" connectionString="server=127.0.0.1;user id=root;password=xx;database=sb1" providerName="MySql.Data.MySqlClient" />
    <add name="SqlDBContext" connectionString="Data …
Run Code Online (Sandbox Code Playgroud)

c# orm entity-framework ef-code-first

6
推荐指数
1
解决办法
567
查看次数

DDD,不同的领域模型可以依赖同一套表吗

在 DDD 中,指南指出领域模型不应该与持久性有关。这意味着不同的域模型可能依赖于相同的表。同时,由于 ORM 在转换模型方面的技术限制(我想是?),这个目标似乎很难实现。有没有一种方法,使用实际的 ORM,创建依赖于数据库中相同表的非常具体的域模型,并防止我们在 99.99% 的 DDD 实现中所拥有的实体和表之间令人失望的 [1:1] 映射?这些技术限制(?)是否会使该指南过时?

谢谢,

persistence domain-driven-design

5
推荐指数
1
解决办法
2717
查看次数

使用dbContext的正确方法

摘要

这个问题是关于方法论的。答案应该是在针对所描述的场景的上下文中与圣杯的链接。

我们在MVC Web应用程序项目中遇到了与dbContext的使用相关的不同问题。

在阅读了许多问答博客,文章……(包括具有存储库和注入模式的提案,Owin,Entity Framework,Ninject)之后,我们仍然不清楚使用dbContext的正确方法。

在MVVC表示层/域实体/逻辑/数据访问层之间进行分隔(包括身份安全处理用户和角色权限)时,是否有任何文章,演示以及与“ CRUD”操作相比更复杂的应用程序中使用“方法”的方法?

描述

以前,我们的方法是在每个存储库中需要时创建dbContext对象。很快,由于连接与存储库功能一起消失,我们发现了诸如“ dbContext已处置”之类的错误。这使得检索到的对象“部分可用”到应用程序的上层(使用技巧.ToList(),这是有限的,因为我们可以访问集合和属性,但以后不能导航​​到对象子表,依此类推)。同样使用来自不同存储库的2个上下文,我们得到了一个异常,告诉我们2个上下文正在尝试将更改注册到同一对象。

由于要及时交付原型,因此我们为整个应用程序创建了一个静态dbContext共享,可以在需要时从任何地方调用它(控制器,模型,逻辑,DataAccess,数据库初始化器)。我们知道这是一个非常肮脏的解决方法,但是比以前的方法效果更好。

仍然存在问题:dbContext一次只能处理1个异步方法调用,并且我们可以有很多调用(例如,userManager.FindByNameAsync-只有异步方法)。例外:“在先前的异步操作完成之前,第二个操作在此上下文上启动”。

我们正在考虑将上下文创建为在控制器中调用动作的第一步,然后将该对象作为“中继竞赛”传递给所调用的所有其他层或函数。这样,连接将从“单击浏览器”开始,直到将响应重新加载到该连接上为止。但是我们不喜欢每个函数都必须有一个额外的参数“上下文”的想法,只是为了共享整个操作路径中各层的连接。

我们确信我们不是第一个想知道使用上下文的正确方法的人。

应用层

我们有这些(逻辑)层,不同的工作空间,但从上到下都是相同的webapp MVC项目:

  • 视图: HTML + Razor + JQuery + CSS。此处的代码仅限于布局,但是某些HTML可能取决于Role。方法调用仅针对控制器,加上utils(如格式设置)。

  • ViewModels:在控制器和视图之间交换的数据容器。类仅定义属性,以及仅与域实体(译者)之间进行转换的函数。

  • 控制器:从浏览器调用的操作导致对逻辑层中功能的调用。此处的身份验证限制了对操作的访问或操作内部的限制。控制器避免使用Domain实体,而避免使用ViewModels,以便与逻辑层进行通信,从而调用ViewModels转换函数。

  • 域实体:用于逻辑层,并用于由实体框架创建数据库表。

  • 逻辑类:域实体具有包含所有操作的EntityLogic类。这些是所有特定客户客户端通用和抽象的规则(ViewModel未知)的核心。

  • 存储库:用于访问数据库。不确定我们是否确实需要这样做,因为Entity Framework已经将Domain实体映射到数据库中的对象。

典型场景

  1. 浏览器在产品控制器中调用操作(POST)以编辑产品。ProductViewModel用作数据的容器。

  2. 控制器操作仅限于角色集合。在动作内部,根据角色,将调用另一个Logic函数,并将ProductViewModel转换为ProductDomainEntity并作为参数传递。

  3. 逻辑EditProduct函数调用不同逻辑类中的其他函数,并且还使用本地化和安全性进行限制或过滤。逻辑可以调用或不调用存储库来访问数据,或为所有对象使用全局上下文,并将生成的域实体集合传递给逻辑。

  4. 根据结果​​,逻辑可能会或可能不会尝试浏览结果的子级集合。结果作为域实体(或的集合)返回给控制器操作,并且根据此结果,控制器可以调用更多Logic,或者重定向到另一个操作,或者使用将结果转换为正确ViewModel的View进行响应。

在哪里,何时何地以及如何创建dbContext以最佳方式支持整个操作?

dbContext处理使对象始终可在图层之间导航?

更新:逻辑层中的所有类都是静态的。像这样从控制器调用方法:

UserLogic.GetCompanyUserRoles(user)
Run Code Online (Sandbox Code Playgroud)

, 要么

user.GetCompanyRoles()
Run Code Online (Sandbox Code Playgroud)

其中GetCompanyRoles()是在UserLogic中实现的User的扩展方法。因此,没有Logic类的实例意味着没有构造函数接收dbContext以便在其方法中使用。

我想让静态类中的静态方法知道在哪里将dbContext的实例激活到当前HttpRequest。

莫非NInjectOnePerRequestHttpModule帮助,这?有人尝试过吗?

c# asp.net-mvc entity-framework dbcontext asp.net-mvc-4

5
推荐指数
1
解决办法
1787
查看次数

多个DbContext类使用相同的连接字符串?

例如,我有以下DbContext类。

public class AppDbContext : DbContext {
    ...
}
public class LogDbContext : DbContext {
    ...
}
public class FooDbContext : DbContext {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果名为的连接字符串AppDbContext位于上,App.Config并且我希望其他DbContext类共享与该字符串相同的连接字符串AppDbContext,我可以只将字符串“ AppDbContext”用作ctorof LogDbContext和的参数FooDbContext。例如,

public class FooDbContext : DbContext {
    public FooDbContext : base("AppDbContext") { }
}
Run Code Online (Sandbox Code Playgroud)

有副作用吗?

更新2013/1/9

在尝试了@ ShinH2S的建议和一些东西之后,我放弃了这种方式,并决定给出具有不同的connectionStrings和数据库的不同的Dbcontext派生类。我已经尝试了一个测试项目,并将其放在GitHub上。当entityframework检测到由于AppDbContextFooDbContext模式具有不同的模式而导致数据库方案更改时,它将引发运行时异常。如果我DropCreateDatabaseIfModelChanges对两个DbContext派生类都分配了策略,则其中一个模型将被删除,因为模型彼此不同。

更新2017/10

这是一个老问题。在我的内存中,EF6 and above versions同一迁移表中的多个上下文可以具有不同的迁移历史记录。我更喜欢SO的答案。我大约两年没有使用C#进行编码。

entity-framework entity-framework-5

4
推荐指数
1
解决办法
1587
查看次数

EF 6加上几个db上下文

看着这样的问题这个我倾向于不使用几个dbcontexts.但是,看一些示例代码仍然会很好.是否有人知道使用多个dbcontexts和工作单元(以及可能的asp.net mvc)的企业级开源实现(c#)?

.net c# asp.net-mvc entity-framework

3
推荐指数
1
解决办法
719
查看次数

IdentityServer4 PersistedGrantDbContext和ConfigurationDbContext

IdentityServer 4的新手。我在文档中的此处遵循IdentityServer4 EntityFramework示例。

运行迁移脚本后

dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb
dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb
Run Code Online (Sandbox Code Playgroud)

它可以工作,现在我的应用程序具有3个数据库上下文。

  • ApplicationDbContext
  • PersistedGrantDbContext
  • ConfigurationDbContext

我的问题是这两个数据库上下文是做什么的?应用程序数据库上下文和其他两个上下文有什么区别?

如果我更新或添加任何模型,是否需要更新所有三个模型?或者什么时候应该在ApplicationDbContext上运行迁移,什么时候应该在其他两个上运行。

对此有任何见识或文献表示赞赏。谢谢。

entity-framework dbcontext ef-migrations identityserver4

2
推荐指数
1
解决办法
2610
查看次数