标签: database

通过外键在模拟的EF6数据库中加载相关数据

最近,我启动了一个用于模拟各种神经网络应用程序的项目。为了处理涉及的大量数据,我已经使用实体框架模型优先方法实现了SQL-Server后端。
另外,我对测试驱动开发(TDD)学科也非常喜欢。但是,为了做到这一点,我需要一个模拟数据库来运行我的测试。经过大量搜索,我发现了商业和开源的多种解决方案。在这一点上,值得注意的是,我是数据库相关主题的新手。因此我选择使用MSDN在内存中模拟描述了EF6框架描述这里

Pff,现在我们有了背景知识,这是我的问题:

我已经创建了模型并从中生成了数据库。实际接口层的代码生成由edmx完成。为了进行单元测试,我遵循了上述教程,并修改了相关字段以匹配我的数据库模型。(可在http://i.imgur.com/julse1Y.png?1中找到它,很遗憾,我没有代表在帖子中包含该图片...)。
但是,我不需要每个测试仅包含一些子集的所有数据。我想要一种情况,我可以在测试的设置中指定要加载哪些表,或者加载依赖项的深度。

我遇到的问题是,在指定相关外键时,相关数据未与当前DBSet一起加载。例如,当为连接集设置数据时,我希望条目链接到相关数据,在这种情况下,是节点集的元素:

var context = new TestContext();

context.NodeSet.Add(new Node { NodeID = 1 });
context.NodeSet.Add(new Node { NodeID = 2 });

context.ConnectionSet.Add(new Connection { ConnID = 1, ToNodeID = 1, FromNodeID = 2 });

var conn = context.ConnectionSet.First();
var fromNode = conn.FromNode;
var toNode = conn.ToNode;
Run Code Online (Sandbox Code Playgroud)

在此示例中,指定的Connection的FromNode属性返回null。理想的情况是该模拟具有将ToNodeID密钥与相关对象相关联的能力。此外,我希望加载顺序与解决iaw的关键约束有关,以便解析相应节点必须存在的FromNode字段。

我乐于接受有关此特定问题的所有建议,但也欢迎你们中的任何人知道模拟EF6模型优先数据库设计的更富建设性的方法。

提前致谢!

c# database unit-testing entity-framework mocking

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

EntityFramework首先使用数据库检测复杂类型

我们正在使用EntityFramework并且已经使用Database First进行了长途旅行.我们有多个上下文和许多实体.虽然我们接受了首先进行代码项目的概念,但我们希望探索EF可用的其他可能性.

我们正在使用最新版本的EF,当前版本为6.0.2

我们有很多常用字段的表,例如审计字段"CreatedBy","CreatedDate","UpdatedBy"和"UpdatedDate",我们认为在这里使用ComplexType是完美的.

在使用这些字段的表中,当我们从数据库生成代码时,它会以raw格式提取字段.然后,我们在模型浏览器中删除它,添加复杂类型,然后将复杂属性映射到DB中的字段名称.

在这个实验中,我们运行"从模型生成数据库"而不映射字段以查看结果列名称是什么,以及任何约定或自动魔术是否允许双向行为(将复杂类型转换为列并将列识别为复杂的类型).

这导致列名称的复杂类型后缀为"_"和字段名称.我们进行了测试,当我们重新生成模型时,它没有从模型中的数据库中拉出复杂类型.

有没有一种正确的方法让EF先检测具有数据库的表中的复杂类型?我可以编写一些代码工厂,构建器,策略或模板吗?

我们的主要动机是我们有很多表可以支持,我们接受频繁的更改,我们希望阻止团队中的人忽略这一步并打破代码库.

非常感谢StackOverflowians的时间!

- 编辑 -

虽然这并没有解决使用复杂类型的自动检测的问题,但这解决了Developer在每次运行T4模板更新时破坏模型的问题.

http://www.ninjacrab.com/2015/02/07/update-entityframework-detecting-complex-type-with-database-first/

c# database entity-framework

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

SQL Query将字放在字段而不是0?

当我运行sql查询时 ;

Select 
    F1 as name, 
    F2 as phone 
from Table where condition = true
Run Code Online (Sandbox Code Playgroud)

如果F2 = 0 我需要那个字段No Phone Number而不是null0

sql database

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

开发数据库凭证最佳做法?

处理内部开发数据库的凭据的最佳实践是什么?对于应用程序还是开发人员?

当前,我们为每个开发数据库创建一个单独的用户/密码,并在代码存储库中提交这些凭据。但是,我们希望摆脱将凭证存储在存储库中的趋势。问题在于我们的开发人员和应用程序都需要访问数据库。

  • 给予开发人员自己的个人帐户以使他们能够访问所有开​​发数据库是一种好习惯吗?甚至所有开发和生产数据库?
  • 开发人员应该在开发环境中使用自己的个人帐户吗?还是应该使用其他的?
  • 如果他们应该使用不同的帐户,那么每个开发数据库都应该有一套单独的凭据吗?还是我们应该创建一个可以访问开发人员可以在其所有应用程序中使用的所有dev数据库的帐户?
  • 如果我们应该为每个开发数据库使用单独的帐户,那么开发人员在为自己建立新的开发环境时应如何获得这些凭据?我们发现,尝试手动跟踪这些内容(例如Wiki)非常容易出错,并且很快就会过时。

如果重要的话,我们使用MySQL(准确地说是Percona)。

mysql database development-environment credentials

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

MongoDB setOnInsert和push如果已经存在

我想添加一个文件,如果它不存在,否则添加一个元素到其中一个子文档.

db.test.update(
  {
    name : 'Peter'
  },
  $setOnInsert : { 
      name : 'Peter', 
      visits: { 'en' : ['today'], 'us' : [] }
  },
  $push : {
      visits.en : 'today'
  },
  { upsert : true }
)
Run Code Online (Sandbox Code Playgroud)

如果Peter存在,则向其visists.envisists.us数组添加元素.否则,为...创建一个文档Peter.该文档的格式visits应包含当前元素('today').

我的问题是我有"have conflicting mods in update".即(afaik),我不能在一个查询中写两件事.但我怎样才能解决这个难题呢?

database upsert mongodb

5
推荐指数
2
解决办法
4469
查看次数

在MySQL 5.6 Windows中启用联合引擎

我正在尝试在MySQL中启用联合引擎.我确实关注了一些帖子和博客,并通过在[mysqld]下添加了federated关键字来编辑my-default.ini [位置:C:\ Program Files\MySQL\MySQL Server 5.6].

[mysqld]
federated
Run Code Online (Sandbox Code Playgroud)

后来我重新启动了MySQL Server,我通过触发SQL Query show引擎来交叉验证是否启用了它;

Engine            Support            Transactions          XA     Savepoints
FEDERATED           NO                    NULL            NULL       NULL
Run Code Online (Sandbox Code Playgroud)

谁能帮帮我吗.

环境操作系统:Windows 7 64位MySQL版本:5.6

mysql database mysql-workbench federated

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

SQL错误:ORA-01039:对视图的基础对象的特权不足

我正在尝试使用以下查询获取视图的解释计划

explain plan for select * from SCHEMA1.VIEW1;
Run Code Online (Sandbox Code Playgroud)

但是我越来越

错误报告 -

SQL Error: ORA-01039: insufficient privileges on underlying objects of the view

01039. 00000 -  "insufficient privileges on underlying objects of the view"


*Cause:    Attempting to explain plan on other people's view without
           the necessary privileges on the underlying objects of the view.


*Action:   Get necessary privileges or do not perform the offending operation.
Run Code Online (Sandbox Code Playgroud)

在获取SQL授权语句时需要帮助

database oracle view grant sql-execution-plan

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

General/Phalcon - ACL和数据库存储

背景

我目前正在研究Phalcon应用程序.应用程序本身相对简单,但我将其用作学习更高级概念和技术的工具.

我已经抛弃了我的自制ACL(访问控制列表)解决方案,并且在Phalcon中提供了丰富的ACL.

这个问题更具概念性,因为我对实施任何解决方案都有信心.

问题是:"你在哪里存储ACL的信息?"

可能解决方案

我目前有一个静态数组,我填写了各种操作和它们的访问级别.

我觉得这有点限制,并且可能通过数据库存储更好地服务.

我可以使用位掩码来指示允许访问各种资源的用户角色,或者可能是最低级别.

我遇到的另一个问题是它是分层的(在某种程度上),但可能存在多个角色 - 权限略有不同.

eg. 
Admin has all roles of captain, secretary and user.
Captain has all the roles of a user and the ability to pick players.
Secretary has all the roles of a user and contact the opponent's secretary.
Captain and secretary both have the ability to email players.
Run Code Online (Sandbox Code Playgroud)

想象一下,如果你愿意的话,它有点像维恩的权限.

高速缓存

下一个问题是,每次访问数据库都会增加性能开销,所以我想缓存它会有意义.

然后会出现问题,如何使缓存无效(计算机科学中只有两件事情......)...也许可能存在一个数据库字段,其中包含ACL的md5哈希值,并在页面上进行了检查-load,查看是否需要重新加载ACL信息.

database security acl caching phalcon

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

除了MySQL和PostgreSQL共有的MONTH()和YEAR()函数的任何替代方法

编写可以在MySQL和PostgreSQL中运行的查询(一个sql文件),到目前为止一切正常,除了以下内容:

SELECT MONTH(Date), YEAR(Date) FROM Ticket;
Run Code Online (Sandbox Code Playgroud)

用于从Ticket表中的Date列中提取月份编号(9,10,11 ..)和年份(2011年,2012 ..)(是的,我无法更改此列的名称).它在MySQL中工作正常,但是当我在PostgreSQL中运行查询时,它会为MONTH()和YEAR()提供以下错误消息.

ERROR:  function month(date) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

经过一段时间的研究后,我发现了其他一些可以在Postgres中完成工作的函数,但我担心这些函数可能无法在MySQL中运行.非常期待任何可能的解决方案.

mysql sql database postgresql

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

MySQL类型= MyISAM错误

我本月早些时候在我的论坛网站上工作,遇到了一个小问题.不幸的是,除了我的数据库,一切都很顺利.我users用这个脚本调用了一个表...

CREATE TABLE `users` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Run Code Online (Sandbox Code Playgroud)

当我尝试运行代码时,我收到此错误...

#1064 - 您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第6行的"TYPE = MyISAM AUTO_INCREMENT = 2"附近使用正确的语法

我曾经用它来处理过这个问题Engine,但是这次我做了两次不同的错误.

我对它进行了一些研究,并认为我的MySQL代码可能已经过时,但是当我从我的一台员工计算机上运行相同版本的MySQL上的代码时,它运行良好.之后,我尝试再次从我的计算机上运行旧版MySQL,但仍然出错.

我的假设是它可能是一个简单的错误,或者是计算机/服务器错误.我会尝试在不同的计算机上做我的网站,说我拥有一家电脑商店,但我不想从头开始,因为它是localhost.此外,我对闪存驱动器感到茫然,而且由于我们在斯堪的纳维亚半岛北部的天气已经到了这里,我无法在短时间内将其运送出去.

所以,作为最后的手段,我决定问你们.感谢帮助.

mysql database

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