2021年1月26日 星期二

自行定義的Model模型處裡

如果有自行定義的Model,需要加入Context中使用時 首先建立Model 例如: public class LoginRtnval { public int rtnval { get; set; } public string grade { get; set; } public string ptype { get; set; } } 然後在 testContext中的資料表宣告中加入 public DbSet LoginRtnvals { get; set; } 在OnModelCreating中加入 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity().HasNoKey(); . . . . . }

Entity Framework Core DataBase First

因為EF CORE不支援資料庫視覺化設計及透過精靈產生entity與context classes,必須使用NuGet Package Manger的Package Manger Console 以命令的方式來產生Model 主要使用命令為Scaffold-DbContext 需注意NuGet是否安裝以下元件 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.SqlServe 範例: Scaffold-DbContext [-Connection] [-Provider] [-OutputDir] [-Context] [-Schemas>] [-Tables>] [-DataAnnotations] [-Force] [-Project] [-StartupProject] [] Scaffold-DbContext "Server=.\SQLExpress;Database=SchoolDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models Scaffold-DbContext "Data Source=192.168.1.100;Initial Catalog=testdb;Persist Security Info=True;TrustServerCertificate=true;User ID=username;Password=userpwd" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models\Test //若資料庫有更新(全部),則後面可以加上 「-Force」 Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force //只更新某一個資料表,如 Blog,可以加上-Tables Blog Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Blog -Force 在DBContext建立完成之後,可將連線字串移往appsettings.json裡。 首先將TestContext裡的if (!optionsBuilder.IsConfigured)內容清除或直接刪除 在appsettings.json中加入 "ConnectionStrings": { "TestConnection": "Server=****;Database=****;User ID=*****;Password=****;Trusted_Connection=True;Integrated Security=False;" } 於 Startup.cs註冊DbContext,引用 using WebApplicationRazorPages.Models.Test; using Microsoft.EntityFrameworkCore; public void ConfigureServices(IServiceCollection services) { ... services.AddDbContextTestContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TestConnection"))); } PS:需注意在執行該命令時,專案不可以有錯誤,否則會有Build Failed發生

2020年11月12日 星期四

SQL SERVER出現The activated proc '[dbo].[sp_syspolicy_events_reader]' running on queue 'msdb.dbo.syspolicy_event_queue' output the following: 'Cannot execute as the database principal because the principal "##MS_PolicyEventProcessingLogin##" does not exist, this type of principal cannot be impersonated, or you do not have permission.' 錯誤

在SQL SERVER的LOG上有發現這個錯誤訊息,每5秒出現一則,原因為msdb使用還原的方式且系統架構由C變為C、D 先使用以下命令檢查,會發現master和msdb的SID不一樣 USE master SELECT * FROM sys.database_principals WHERE [name] = '##MS_PolicyEventProcessingLogin##' go USE msdb SELECT * FROM sys.database_principals WHERE [name] = '##MS_PolicyEventProcessingLogin##' go 使用以下命令來修正 use [master] go exec sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##'; go use [msdb] go exec sp_change_users_login 'Auto_Fix', '##MS_PolicyEventProcessingLogin##'; go 再使用以下命令來檢查是否有修正 USE master SELECT * FROM sys.database_principals WHERE [name] = '##MS_PolicyEventProcessingLogin##' go USE msdb SELECT * FROM sys.database_principals WHERE [name] = '##MS_PolicyEventProcessingLogin##' go 參考資料 https://dbamohsin.wordpress.com/2017/01/12/cannot-execute-as-the-database-principal-because-the-principal-ms_policyeventprocessinglogin/

SQL SERVER 維護計畫無法啟用,出現SSIS 子系統無法載入 [see the SQLAGENT.OUT file for details]; 已暫停作業

當MSDB使用還原的方式,如果SQL SERVER架構變更,例如由C碟改為C、D兩碟,在使用SQL維護計畫時SQL Agent會有錯誤發生,導致無法執行維護計畫 解決方法如下 檢查MSDB的資料 select * from msdb.dbo.syssubsystems 會發現subsystem_dll的資料仍然是指到C碟 執行以下指令 delete from msdb.dbo.syssubsystems exec msdb.dbo.sp_verify_subsystems 1 再重新啟動 Agent 服務即可 參考資料 https://byronhu.wordpress.com/2011/07/04/sql-agent-job-%E6%9A%AB%E5%81%9Csuspend/

2020年11月10日 星期二

Windows共用相關指令

命令視窗需用管理員權限開啟 以下為開啟管理員權限的CMD 在PowerShell使用指令Start-Process "cmd.exe" –Verb RunAs 或 按Window+X,再按A 建立LocalUser net user username password /add 建立LocalGroup net localgroup testgroup /add /comment:"This is group for test users" 將user加入localgroup net localgroup testgroup jack /add 將user移出localgroup net localgroup testgroup jack /delete 移除localgroup net localgroup testgroup /delete, 設定共用指令:net share test1$=d:\test1 /GRANT:jack,READ /GRANT:bob,REAF 說明:將d:\test1設為共用,名稱test1$,授予使用者jack讀取的權限 net share sharename=drive:path [/GRANT:user,[READ | CHANGE | FULL]] [/USERS:number | /UNLIMITED] [/REMARK:"text"] [/CACHE:Manual | Documents| Programs | BranchCache | None] 設定目錄安全性指令:icacls "d:\test1" /grant jack:(OI)(CI)M /T 說明:將d:\test1的安全性加入jack的權限,(OI)物件繼承,(CI)容器繼承,M修改存取權,/T在目前目錄及其子目錄中的所有指定檔案上執行作業。 完整說明參考https://docs.microsoft.com/zh-tw/windows-server/administration/windows-commands/icacls 設定share folder權限 subinacl /share \\serverName\shareName /grant=everyone=r

2019年5月14日 星期二

TSQL取得SQL SERVER IP

SELECT
CONNECTIONPROPERTY('net_transport') AS net_transport,
CONNECTIONPROPERTY('protocol_type') AS protocol_type,
CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
CONNECTIONPROPERTY('client_net_address') AS client_net_address

2018年5月23日 星期三

Windows sysprep位置

路徑:C:\Windows\System32或是C:\Windows\SysWOW64的sysprep目錄