Я работаю с NHibernate + свободно, у меня есть этот кодКак добавить определенный файл .hbm.xml в NHibernate конфигурации для использования в экспортной схеме
FluentConfiguration fc = Fluently.Configure()
.Database(MySQLConfiguration.Standard.ConnectionString(connectionString).ShowSql()
.Dialect<NHibernate.Dialect.MySQL5Dialect>().Driver<NHibernate.Driver.MySqlDataDriver>())
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<UsuarioMap>()
.Conventions.Add(PrimaryKey.Name.Is(a => string.Concat("Id", a.EntityType.Name)))
.Conventions.Add(ForeignKey.Format((x, y) => string.Concat("Id", y.Name))))
.ExposeConfiguration(BuildSchema);
Это добавляет отображения из моих файлов карт, позже я использую выставленную конфигурацию для экспорта схемы
Теперь мне нужно добавить конкретный файл .hbm.xml
, чтобы создать триггер в моем db, и я не знаю, как, я уже написал файл .hbm.xml
, он выглядит таких как
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<database-object>
<create>
CREATE TRIGGER borradoUsuario BEFORE DELETE ON activaciones
FOR EACH ROW BEGIN set @idUsuario = OLD.IdUsuario;
SELECT IdHistorialEstado FROM Usuarios WHERE IdUsuario = @idUsuario INTO @IdHistorial;
SELECT IdDomicilio FROM Usuarios WHERE IdUsuario = @idUsuario INTO @idDomicilio;
DELETE FROM usuarios WHERE IdUsuario = @idUsuario;
DELETE FROM domicilios WHERE IdDomicilio = @IdDomicilio;
DELETE FROM historialestado WHERE IdHistorialEstado = @idHistorial;
DELETE FROM detallehistorialestado WHERE idHistorialEstado = @idHistorial;
DELETE FROM inmobiliarias WHERE IdInmobiliaria = @idUsuario;
DELETE FROM particulares WHERE IdParticular = @idUsuario;
DELETE FROM moderadores WHERE IdModerador = @idUsuario;
END
</create>
<drop>
</drop>
я надеюсь, что я получить некоторую помощь здесь =/
я перейти на другой ПОДХОД, нет у меня есть класс, который простирается от AbstractAuxiliaryDatabaseObject, он знает создавать и удалять скрипты:
public class BorradoUsuarioTrigger : AbstractAuxiliaryDatabaseObject{
public override string SqlCreateString(Dialect dialect, IMapping p, string defaultCatalog, string defaultSchema){
//The drop is important, because the shema export calls and executes this twice.
return @"
DROP TRIGGER IF EXISTS borradoUsuarioTrigger;
DELIMITER $$
CREATE TRIGGER borradoUsuarioTrigger BEFORE DELETE ON activaciones FOR EACH ROW
BEGIN
DECLARE idHist INTEGER;
DECLARE idDom INTEGER;
SET idHist = (SELECT IdHistorialEstado FROM Usuarios WHERE IdUsuario = OLD.IdUsuario);
SET idDom = (SELECT IdDomicilio FROM Usuarios WHERE IdUsuario = OLD.IdUsuario);
DELETE FROM domicilios WHERE IdDomicilio = @idDom;
DELETE FROM historialestado WHERE IdHistorialEstado = @idHist;
DELETE FROM detallehistorialestado WHERE idHistorialEstado = @idHist;
DELETE FROM inmobiliarias WHERE IdInmobiliaria = OLD.idUsuario;
DELETE FROM particulares WHERE IdParticular = OLD.idUsuario;
DELETE FROM moderadores WHERE IdModerador = OLD.idUsuario;
DELETE FROM usuarios WHERE IdUsuario = OLD.idUsuario;
END$$";
}
public override string SqlDropString(Dialect dialect, string defaultCatalog, string defaultSchema){
return @"DROP TRIGGER IF EXISTS borradoUsuarioTrigger";
}
public void AddDialectScope(string dialectName){
throw new NotImplementedException();
}
public bool AppliesToDialect(Dialect dialect){
return true;
}
public void SetParameterValues(IDictionary<string, string> parameters){
base.SetParameterValues(parameters);
}
}
я думаю, что я близок к тому, что мне нужно, но это все еще не работает, я получаю следующее сообщение в наиболее глубоком исключением:
"Parameter @idDom must be defined"
Я думаю, это потому, что я пытаюсь вернуть жестко закодированную строку для скрипта sql create, но я не знаю, может ли кто-нибудь мне помочь?
Mybe это может помочь вам понять, это: http://stackoverflow.com/questions/9916222/creating-sqlite-trigger-via-nhibernate – Jester
еще не решился = / –