嗨,我想用 asp.net 開發 Web 應用程式,我有外鍵,我想從父表中洗掉,但我有例外,為什么我得到這個例外。我添加了代碼詳細資訊。請幫助我
父類
public class Calisan:IEntity
{
public int CalisanId { get; set; }
public string TcNo { get; set; }
public string Isim { get; set; }
public string Soyisim { get; set; }
}}
兒童班
public class Hastalik:IEntity
{
public int HastalikId { get; set; }
public int CalisanId { get; set; }
public string HastalikIsmi { get; set; }
public DateTime HastalikTarihi { get; set; }
}
t-sql
CREATE TABLE [dbo].[Hastaliklar] (
[HastalikId] INT NOT NULL,
[CalisanId] INT NULL,
[HastalikIsmi] VARCHAR (50) NOT NULL,
[HastalikTarihi] DATE NOT NULL,
PRIMARY KEY CLUSTERED ([HastalikId] ASC),
CONSTRAINT [FK_Hastaliklar_Calisanlar] FOREIGN KEY ([CalisanId]) REFERENCES [dbo].[Calisanlar] ([CalisanId])
);
我的背景
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=SirketDB;Trusted_Connection=true");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Hastalik>()
.HasOne<Calisan>()
.WithMany()
.HasForeignKey(p => p.CalisanId)
.OnDelete(DeleteBehavior.Cascade);
}
public DbSet<Calisan> Calisanlar { get; set; }
public DbSet<Hobii> Hobiler { get; set; }
public DbSet<Hastalik> Hastaliklar { get; set; }
public DbSet<Covid> Covids { get; set; }
public DbSet<Mesai> Mesailer { get; set; }
public DbSet<Ilac> Ilaclar { get; set; }
public DbSet<Temasli> Temaslilar { get; set; }
public DbSet<Sempton> Semptonlar { get; set; }
public DbSet<CovidBelirti> CovidBelirtiler { get; set; }
public DbSet<Asi> Asilar { get; set; }
public DbSet<KronikHastalik> KronikHastaliklar { get; set; }
EfEntityRepositoryBase
public void Delete(TEntity entity)
{
using (TContext context = new TContext())
{
var deletedEntity = context.Entry(entity);
deletedEntity.State = EntityState.Deleted;
//exception context.SaveChanges();
}
}
例外
SqlException: DELETE 陳述句與 REFERENCE 約束“FK_Hastaliklar_Calisanlar”沖突。沖突發生在資料庫“SirketDB”、表“dbo.Hastaliklar”、“CalisanId”列中。該陳述句已終止。
uj5u.com熱心網友回復:
從我所見,您可以對“SirketDB”表“dbo.Hastaliklar”執行截斷陳述句,因為存在依賴于您嘗試洗掉的資料列的資料記錄。
您可以DELETE FROM dbo.Hastaliklar在 SirketDB 上運行截斷查詢或
查詢,您的陳述句應該可以作業。
uj5u.com熱心網友回復:
通過使 CalisanId 為空和 .OnDelete(DeleteBehavior.ClientSetNull) 來改善類關系
public class Calisan:IEntity
{
public int CalisanId { get; set; }
public string TcNo { get; set; }
public string Isim { get; set; }
public string Soyisim { get; set; }
public virtual List <Hastalik> Hastaliks {get; set;}
}}
public class Hastalik:IEntity
{
public int HastalikId { get; set; }
public int? CalisanId { get; set; }
public string HastalikIsmi { get; set; }
public DateTime HastalikTarihi { get; set; }
}
modelBuilder.Entity<Hastalik>()
.HasOne<Calisan>()
.WithMany()
.HasForeignKey(p => p.CalisanId)
.OnDelete(DeleteBehavior.ClientSetNull);
恕我直言,洗掉方法也應該修復
public void Delete(T entity)
{
using (TContext context = new TContext())
{
var deletedEntity = context.Set<T>().Find(entity);
context.Set<T>().Remove(deletedEntity);
context.SaveChanges();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395816.html
