我正在看一个asp.net应用程序,我注意到有两个地方定义了程序集.在web.config中有配置/ system.web/compilation/assemblies/add元素.在项目文件中,Project/ItemGroup/Reference元素下有引用设置.
我想知道,在任一位置添加的程序集/引用之间有什么区别?
是否可以在 .NET Core 中执行Add、等操作AddAsync,Update而无需随后跟踪实体,而无需编写代码来专门将上下文与跟踪实体分离?
// select, its possible to do no trackiing
var audit = _dbContext.Audit.First().AsNoTracking();
// doing an add or update, audit is now tracked unless it's detached
_dbContext.Audit.Add(audit);
int rows = _dbContext.SaveChanges();
_dbContext.Entry(audit).State = EntityState.Detached;
Run Code Online (Sandbox Code Playgroud)
我问这个是因为我有一个 Windows 服务,它消耗RabbitMq消息并写入数据库。RabbitMq通过事件处理程序接收消息。因此,数据库本质上变成了一个单例,即使它是作为瞬态添加的。我每次都可以创建一个新的数据库上下文。但这似乎太过分了。或者,还有更好的方法?
我在开发环境中有一些插件要发布,开发人员在插入时没有使用序列来获取正确的标识符.他所做的就是进入生产数据库,找出最大的标识符是什么,并为其添加了几百个数字.为了引导他现在离开了公司.
因此,prod的脚本充满了数百个:
INSERT INTO table (sequencecol, cola, colb) VALUES (90001,'test','test');
INSERT INTO childtableB (foreignkeyTableA, cola) VALUES (90001,'test')
Run Code Online (Sandbox Code Playgroud)
什么时候应该
INSERT INTO tableA (sequencecol, cola, colb) VALUES (tablesequence.NEXTVAL,'test','test');
INSERT INTO childtableB (foreignkeyTableA, cola) VALUES (tablesequence.CURRVAL,'test')
Run Code Online (Sandbox Code Playgroud)
我正在处理的scneario比这更复杂,我没有时间重写,而只是想将序列设置为作为此脚本的一部分插入的记录的最大值.
是否可以更改序列的值以将其设置为我要插入的记录的最高值+1的值?
我愿意接受更好的建议
我需要在游标中插入大约300000行的一些插入,然而这运行得很慢,有关如何让它运行得更快的任何想法?我可以通过批量提交加快速度吗?所以例如我会在第1000行之后执行提交
DECLARE
CURSOR test_cursor IS
SELECT a from database.mytable
BEGIN
FOR curRow IN test_cursor LOOP
insert into tableb (testval)
values ('something');
commit;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)