2013-02-08 200 views
2

当我删除一台计算机时,有什么办法可以让删除级联发生?基本上,当我删除一台计算机时,我希望它删除实例及其所有参考,但环境和产品除外。EF5代码第一个级联删除

计算机实体:

public class Computer 
{ 
    [Key] 
    public int Id { get; set; } 

    public string IpAddress { get; set; } 

    public string Name { get; set; } 

    public string UserFriendlyName { get; set; } 

    public string Description { get; set; } 
} 

实例实体:

public class Instance 
{ 
    public Instance() 
    { 
     TestResults = new HashSet<TestResult>(); 
     Environments = new HashSet<Environment>(); 
    } 

    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Version { get; set; } 

    public string UserFriendlyName { get; set; } 

    public virtual Product Product { get; set; } 

    public virtual Profile LastKnownProfile { get; set; } 

    public virtual Computer Computer { get; set; } 

    public virtual ICollection<TestResult> TestResults { get; set; } 

    public virtual ICollection<Environment> Environments { get; set; } 
} 

回答

2

您需要使用Fluent API定义关系。使用这样的事情:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Computer>() 
       .HasRequired(x => x.Instance) 
       .WithRequiredPrincipal(x => x.Computer) 
       .WillCascadeOnDelete(); 

    modelBuilder.Entity<Instance>() 
       .HasRequired(x => x.LastKnownProfile) 
       .WithRequiredPrincipal(x => x.Instance) 
       .WillCascadeOnDelete(); 

    modelBuilder.Entity<Instance>() 
       .HasMany(x => x.TestResults) 
       .WithOptional(x => x.Instance) 
       .WillCascadeOnDelete(); 
} 

这证明相当不错的MSDN:Configuring Relationships with the Fluent API

+0

非常感谢。我已经为该链接添加了书签。 – twreid 2013-02-11 14:52:33

0

检查多对多relationship.is关闭级联删除国家和手动删除相关记录

+0

是的,它被关闭。不过,我更关心如何将其配置为在计算机被删除时删除实例。 – twreid 2013-02-08 14:49:25