2015-04-02 108 views
1

我有一个应用程序绑定到数据库以加载和存储数据。在没有数据库连接的情况下使用实体框架

但是,我不想要求用户在网络上并有权访问数据库。没有连接就无法加载或保存。

我想实例化它没有数据库连接(只是在内存中使用它),但所有的构造函数使用数据库。我宁愿不修改实体框架生成的.cs文件,以防我需要从数据库再次更新它,我不想消除我的更改。

如何在没有连接的情况下使用EF模型?

public partial class SimRunnerEntities : ObjectContext 
{ 
    #region Constructors 

    /// <summary> 
    /// Initializes a new SimRunnerEntities object using the connection string found in the 'SimRunnerEntities' section of the application configuration file. 
    /// </summary> 
    public SimRunnerEntities() : base("name=SimRunnerEntities", "SimRunnerEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     OnContextCreated(); 
    } 

    /// <summary> 
    /// Initialize a new SimRunnerEntities object. 
    /// </summary> 
    public SimRunnerEntities(string connectionString) : base(connectionString, "SimRunnerEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     OnContextCreated(); 
    } 

    /// <summary> 
    /// Initialize a new SimRunnerEntities object. 
    /// </summary> 
    public SimRunnerEntities(EntityConnection connection) : base(connection, "SimRunnerEntities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     OnContextCreated(); 
    } 

所有SimRunnerEntities构造函数使用某种形式的有效连接的

+0

你想在内存数据库中使用?如果您的EF版本支持它,请使用它。否则,请将数据层抽象出来,以便可以在内存(或本地嵌入式数据库)中交换数据库连接。 – mason 2015-04-02 18:58:48

+0

使用EF没有数据库是什么意思? – Matthew 2015-04-02 19:02:45

+0

是的,我想在内存中使用。将项目添加到表格等,而不保存到数据库。我只是无法弄清楚如何在没有有效连接字符串的情况下创建EF对象的实例。 – runfastman 2015-04-02 19:30:25

回答

1

实例化的DbContext没有打开连接到数据库。数据库连接将在第一次查询后打开,您选择了某些内容。因此,如果您不修改或读取任何数据,则无需访问数据库即可完全安全工作。

问题是,您无法真正对EF DbContext做任何事情而不触发数据库,​​除非将它的实体类用于某些自定义目的。

另一个问题是:你的应用程序真的可以在不使用数据库的情况下工作吗?你想达到什么目的?

+0

是的,它可以在没有数据库的情况下工作。我只是将它改为使用EF,这样当我想保存/加载一些预先配置的数据时,我不需要翻译所有内容。如何在不尝试连接数据库的情况下新建一个EF对象? – runfastman 2015-04-02 19:27:16

+0

“做一个新的EF对象”究竟意味着什么?实例化某个实体的实例?如果是这样,只要使用“新”关键字,就像任何其他类一样。 – Yura 2015-04-02 19:36:53

+0

请参阅我为SimRunnerEntities添加的代码。我需要做一个新的SimRunnerEntities,但是如果我的.config文件中没有名为SimRunnerEntities的连接字符串,那么显然它会给我一个错误。 – runfastman 2015-04-02 19:40:02

1

是的,你可以做到这一点。

在示例中,我有与该体系结构布局工作溶液:
项目A - 服务器端(WCF)
项目B - 类库含有EF模型+ DB连接
项目ç - 客户端侧(WPF)

到B A参考,
A是WCF和硬拷贝从B的配置,以便它可以访问使用的DbContext数据库。

C基准,以B,
C为WPF项目,实体正在从一个使用WCF填充并且已经有像其通过EF产生已经自动INPC的东西。


我不得不在客户端添加的唯一事情是一个自定义类容器,它具有实体的属性列表类型(即列出用户{获取;集;}和等)


根据评论请求的进一步解释:

问:你能解释多一点。如果您的项目B具有数据库连接,该解决方案如何在没有数据库连接的情况下工作

答:当然,项目B配置文件(app.config)根本没有被使用。
我只是在那里存档或复制粘贴。
我没有将它复制并粘贴到Project A app.config。

问:在UI中,我想实例化一个数据对象,但没有有效的连接字符串失败,因为它包含一个EF项目。

答:关于一个对象..只是,如果你实例化任何其他对象实例化:
var entityX = new MyEntity{fill props code here};
它不要求我使用Dbcontext做到这一点。

我相信可能是你的下一个问题是如何将数据从WCF运送到客户端 - 使实体“可跟踪”?为此,我创建了一个完整的DTO Layer ..但是这超出了您原来的问题范围:)
关于简单问题,您可以使用实体而不使用dbcontext来管理它们答案是:是的。

+0

你能多解释一下吗?如果您的项目B具有数据库连接,该解决方案如何在没有数据库连接的情况下工作在我的解决方案中,我有两个项目用于数据,包括一个EF obj,另一个用于我的用户界面。在UI中,我想实例化一个数据对象,但没有有效的连接字符串失败,因为它包含一个EF项目。 – runfastman 2015-04-02 20:47:47

+0

当然,我在答案中增加了更多内容来解释更多。如果您需要更多信息,请随时索取更多信息。 – 2015-04-03 01:01:29

+0

你能像我一样发布实体框架对象的构造函数吗? – runfastman 2015-04-03 13:24:36

相关问题