实体框架6.1:1-1和1-多派生类型中的关系和标识关系

乔尔姆杰夫

更新:我应该注意到该Id属性NavigationPropertyClass不是数据库生成的。在我的实际模型中,NavigationPropertyClass它也是层次结构方案的一部分(使用TPH),此处未显示,虽然NavigationPropertyClass具有DerivedClass1实例和实例的集合,DerivedClass2但从基类继承自基类的所有类不一定都是这种情况NavigationPropertyClass派生。


我的模型的一部分看起来像这样(为简洁起见,省略了其他属性和构造函数):

//Many other classes inherit from this class
//and many of the derived classes are not composed of DerivedClass1 or DerivedClass2
public abstract SomeOtherBaseClass{
    public int Id {get; set;} //not database generated, set in the constructor
}

public NavigationPropertyClass: SomeOtherBaseClass{
    public DerivedClass1 Derived1 {get; set;}
    public virtual ICollection<DerivedClass2> Derived2Collection {get; set;}
}

public abstract class BaseClass{
    public int Id {get; set;}
    //other properties shared by derived classes
}

public class DerivedClass1: BaseClass{
    public NavigationPropertyClass NavigationProperty {get; set;}
    //other properties pertinent to DerivedClass1
}


public class DerivedClass2: BaseClass{
    public NavigationPropertyClass NavigationProperty {get; set;}
    //other properties pertinent to DerivedClass2
}

DerivedClass1具有带有1-1关系NavigationPropertyClass,而DerivedClass2具有带许多-1的关系NavigationPropertyClass

我正在尝试在每个派生类中建立标识关系,以便NavigationPropertyClass从数据库中删除的实例时,的关联实例DerivedClass1和的任何实例也将从数据库中删除DerivedClass2我可以看到的唯一方法是使用TPT继承,但是即使这样,我也无法正常工作。我会发布我的Fluent API配置,但是此时我尝试了很多排列,以至于我不知道要发布哪个。

有什么办法可以做我想做的事吗?如果是这样,Fluent API配置是什么样的?

尤里亚姆·钱德拉

这是符合您要求的模型。

public abstract class Base
{
    public int Id { get; set; }
}
public class Derived1 : Base
{
    public int PropDerived1 { get; set; }
    public NavigationPropertyClass NavigationProperty { get; set; }
}
public class Derived2 : Base
{
    public int PropDerived2 { get; set; }

    public int NavigationPropertyClassId { get; set; }
    public NavigationPropertyClass NavigationPropertyClass { get; set; }
}
public abstract class SomeOtherBaseClass
{
    public int Id { get; set; }
}
public class NavigationPropertyClass : SomeOtherBaseClass
{
    public Derived1 Derived1 { get; set; }
    public virtual ICollection<Derived2> Derived2s { get; set; }
}

而且,ToTable在配置模型构建器时,只需要使用TPT继承即可。

public class AppContext : DbContext
{
    public DbSet<SomeOtherBaseClass> SomeOtherBaseClasses { get; set; }
    public DbSet<Base> Bases { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Derived1>().ToTable("Derived1");
        modelBuilder.Entity<Derived2>().ToTable("Derived2");
        modelBuilder.Entity<NavigationPropertyClass>().ToTable("NavigationPropertyClass");

        modelBuilder.Entity<NavigationPropertyClass>()
            .HasRequired(x => x.Derived1)
            .WithRequiredDependent(x => x.NavigationProperty);
    }
}

并将所有内容保留给EF惯例,除了NavigationPropertyClass::Id也是FK的部分Derived1

结果

结果

简化的NavigationPropertyClass约束

PRIMARY KEY [Id]
FOREIGN KEY([Id]) REFERENCES [dbo].[Derived1] ([Id])
FOREIGN KEY([Id]) REFERENCES [dbo].[SomeOtherBaseClasses] ([Id])

更多的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架6.1:1-1和1-多派生类型中的关系和标识关系

来自分类Dev

实体框架中的1:1关系

来自分类Dev

实体框架1-to- *和1-to-1

来自分类Dev

实体框架1与0的关系

来自分类Dev

实体框架:如何创建具有相同对象的双重关系(1-1和多-1)

来自分类Dev

实体框架-1对...到多对1选择

来自分类Dev

实体框架6 RC1中的EntityTypeConfiguration

来自分类Dev

以1:1关系更新EF中的实体

来自分类Dev

实体框架延迟加载无法在1 .. *单向关系中工作

来自分类Dev

如何在实体框架中获得1:n关系

来自分类Dev

通过关联表的实体框架1to1关系在EDMX中不起作用

来自分类Dev

当从属实体为null时,实体框架1对1关系不会引发异常

来自分类Dev

实体框架核心1不进行关系查询

来自分类Dev

实体框架1对多关系-多重性错误113

来自分类Dev

SQLite和实体框架6

来自分类Dev

实体框架6和集合

来自分类Dev

实体框架6和集合

来自分类Dev

实体框架6和oracle

来自分类Dev

$ 1,$ {1}和$“ 1”在awk之间的差异

来自分类Dev

!a ==-1和a!=-1之间的区别

来自分类Dev

实体框架6中的一对多和一对多关系

来自分类Dev

为什么为 dx[dir 选择值 {1, 1, 0, -1, -1, -1, 0, 1} 和 {0, 1, 1, 1, 0, -1, -1, -1} ] 和 dy[dir]?

来自分类Dev

比较工作表1 col 1和工作表2 col 1在工作表1 col 6中的位置值

来自分类Dev

为什么 '1' + '1' = 98 和 '1' + 1 = 50?

来自分类Dev

如何检测1个实体框架对象中的更改

来自分类Dev

如何检测1个实体框架对象中的更改

来自分类Dev

一对多和一对多的关系 1 laravel

来自分类Dev

代码第一实体框架6:带有复合键的1到1

来自分类Dev

Laravel从多对多关系中创建1-1关系

Related 相关文章

热门标签

归档