Probleme mit dem Erstellen von Modell für SQL-Server-Master-DB. ich ausgewählt Datenbank zuerst, brachte keine Objekte enthalten, also habe ich ein leeres Modell:Abfrage auf Master-Datenbank wirft UnintentionalCodeFirstException in DatabaseFirst
masterModel.cs:
*//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------*
masterEntities.cs:
public partial class masterEntities
{
static masterEntities()
{
// don't let EF modify the database schema...
Database.SetInitializer<masterEntities>(null);
}
public masterEntities(string connectionString)
: base(connectionString)
{
}
}
Das Ziel ist, um eine Abfrage gegen die Master-Datenbank auszulösen, um herauszufinden, ob der aktuelle Benutzer serveradmin-Rechte besitzt (um später eine neue Datenbank zu erstellen):
public bool UserHasAdminPrivilegesAtDatabaseServer(DatabaseServer databaseServer)
{
var sqlBuilder = new SqlConnectionStringBuilder
{
DataSource = databaseServer.Server,
InitialCatalog = "master",
PersistSecurityInfo = true,
IntegratedSecurity = true,
MultipleActiveResultSets = false,
};
//assumes a connectionString name in .config of MyDbEntities
var entityConnectionStringBuilder = new EntityConnectionStringBuilder
{
Provider = "System.Data.SqlClient",
ProviderConnectionString = sqlBuilder.ConnectionString,
Metadata = "res://*/masterModel.csdl|res://*/masterModel.ssdl|res://*/masterModel.msl",
};
var connstring = entityConnectionStringBuilder.ProviderConnectionString;
using (var context = new masterEntities(connstring))
{
const string sql = "SELECT IS_SRVROLEMEMBER('sysadmin')";//"SELECT IS_SRVROLEMEMBER('sysadmin')";
var a = context.Database.SqlQuery<int>(sql).FirstOrDefault();
return a == 1;
}
}
Das Problem ist jetzt, dass EF das Ereignis OnModelCreating feuert, die wie folgt in DatabaseFirst Modus implementiert:
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class masterEntities : DbContext
{
public masterEntities()
: base("name=masterEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}
und hier sind wir: neue UnintentionalCodeFirstException werfen(); Irgendwie möchte EF einige Sachen in der Master-DB erstellen; Selbst wenn wir die globale statische Eigenschaft festlegen, sollte dies nicht der Fall sein und das Modell selbst ist leer: Database.SetInitializer<masterEntities>(null)
;