最近,我启动了一个用于模拟各种神经网络应用程序的项目。为了处理涉及的大量数据,我已经使用实体框架模型优先方法实现了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模型优先数据库设计的更富建设性的方法。
提前致谢!
我们正在使用EntityFramework并且已经使用Database First进行了长途旅行.我们有多个上下文和许多实体.虽然我们接受了首先进行代码项目的概念,但我们希望探索EF可用的其他可能性.
我们正在使用最新版本的EF,当前版本为6.0.2
我们有很多常用字段的表,例如审计字段"CreatedBy","CreatedDate","UpdatedBy"和"UpdatedDate",我们认为在这里使用ComplexType是完美的.
在使用这些字段的表中,当我们从数据库生成代码时,它会以raw格式提取字段.然后,我们在模型浏览器中删除它,添加复杂类型,然后将复杂属性映射到DB中的字段名称.
在这个实验中,我们运行"从模型生成数据库"而不映射字段以查看结果列名称是什么,以及任何约定或自动魔术是否允许双向行为(将复杂类型转换为列并将列识别为复杂的类型).
这导致列名称的复杂类型后缀为"_"和字段名称.我们进行了测试,当我们重新生成模型时,它没有从模型中的数据库中拉出复杂类型.
有没有一种正确的方法让EF先检测具有数据库的表中的复杂类型?我可以编写一些代码工厂,构建器,策略或模板吗?
我们的主要动机是我们有很多表可以支持,我们接受频繁的更改,我们希望阻止团队中的人忽略这一步并打破代码库.
非常感谢StackOverflowians的时间!
- 编辑 -
虽然这并没有解决使用复杂类型的自动检测的问题,但这解决了Developer在每次运行T4模板更新时破坏模型的问题.
当我运行sql查询时 ;
Select
F1 as name,
F2 as phone
from Table where condition = true
Run Code Online (Sandbox Code Playgroud)
如果F2 = 0
我需要那个字段No Phone Number而不是null或0
处理内部开发数据库的凭据的最佳实践是什么?对于应用程序还是开发人员?
当前,我们为每个开发数据库创建一个单独的用户/密码,并在代码存储库中提交这些凭据。但是,我们希望摆脱将凭证存储在存储库中的趋势。问题在于我们的开发人员和应用程序都需要访问数据库。
如果重要的话,我们使用MySQL(准确地说是Percona)。
我想添加一个文件,如果它不存在,否则添加一个元素到其中一个子文档.
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.en或visists.us数组添加元素.否则,为...创建一个文档Peter.该文档的格式visits应包含当前元素('today').
我的问题是我有"have conflicting mods in update".即(afaik),我不能在一个查询中写两件事.但我怎样才能解决这个难题呢?
我正在尝试在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
我正在尝试使用以下查询获取视图的解释计划
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授权语句时需要帮助
背景
我目前正在研究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信息.
编写可以在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中运行.非常期待任何可能的解决方案.
我本月早些时候在我的论坛网站上工作,遇到了一个小问题.不幸的是,除了我的数据库,一切都很顺利.我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.此外,我对闪存驱动器感到茫然,而且由于我们在斯堪的纳维亚半岛北部的天气已经到了这里,我无法在短时间内将其运送出去.
所以,作为最后的手段,我决定问你们.感谢帮助.