나는 유창한 nhibernate를 사용하고있다, 나는 삭제 폭포를 켤 것이다. 하지만 난 일하지 않아. foregin 키만 삭제합니다. 다음 구성 능통 자 NHibernate :유창한 nhibernate 삭제 캐스케이드
public virtual void TreatConfiguration(NHibernate.Cfg.Configuration configuration)
{
var update = new SchemaUpdate(configuration);
update.Execute(false, true);
}
public ISessionFactory CreateSessionFactory(string istanza, string db)
{
//string server = @"BRUX-PC\SQLEXPRESS";
//int port = 1433;
string server = istanza;
string database = db;
const string user = "xxxx";
const string password = "xxxx";
var connectionString = string.Format("Server={0};Database={1};User Id={2};Password={3};",
server, database, user, password);
var autoMap = AutoMap.AssemblyOf<AggregateBase>()
.Where(t => typeof (AggregateBase).IsAssignableFrom(t))
.Conventions.Add(
ConventionBuilder.HasMany.Always(x => x.Cascade.AllDeleteOrphan()),
PrimaryKey.Name.Is(o => "Id"),
ForeignKey.EndsWith("Id"),
DefaultLazy.Never(),
DefaultCascade.All(),
DynamicUpdate.AlwaysTrue(),
DynamicInsert.AlwaysTrue()
);
return Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008.ConnectionString(connectionString))
.Mappings(m => m.AutoMappings.Add(autoMap))
.ExposeConfiguration(TreatConfiguration)
.BuildSessionFactory();
}
내 컨트롤러 :
contabilitaRepository.RemoveByIdFattura(testataContabilita.IdFattura);
내 저장소 :
public void RemoveByIdFattura(Guid? id)
{
var userToDelete =
repository.Single(c => c.IdFattura == id);
repository
.Remove(userToDelete);
}
내 모델 :
public class TestataContabilita : AggregateBase
{
public virtual Guid IdFattura
{
get;
set;
}
public virtual int NumeroRegistrazione
{
get;
set;
}
public virtual string TipoVendita
{
get;
set;
}
public virtual IList<CorpoContabilita> CorpoContabilita { get; set; }
}
public class CorpoContabilita : AggregateBase
{
public virtual int NumeroRegistrazione
{
get;
set;
}
public virtual int? ControPartita
{
get;
set;
}
public virtual string Automatico
{
get;
set;
}
}
나는 eliminatio을 실행할 때 n, "CorpoContabilita"가 남아있는 동안 "TestataContabilita"만 삭제하지만 foregin 키는 삭제합니다. 왜?
당신은 대답하지만, "Inverse"를 인식하지 못해 "ConventionBuilder.HasMany.Always (x => x.Cascade.AllDeleteOrphan(). Inverse())"를 호출 할 수 없습니다. "TestataContabilita.CorpoContabilita.Clear();"를 삽입하십시오. 만약 내가 "repository.Remove (userToDelete);"전에 내 저장소에 삽입 내가 커밋하면 아이를 지우지 마라 = ( – Brux88