我有一个引用自己的表,但我正在努力获得我想要的映射.我希望能够将儿童定义为拥有母亲,父亲和/或监护人的特定人的集合.守护者可能是父亲或母亲.
我希望能够看到人们被列入名单的人们可以浏览的树状图; 用户可以扩展一个人的节点以显示该人的所有孩子,而不管儿童定义的关系(母亲,父亲或监护人).
public partial class Person
{
[Key]
public int ID { get; set; }
[StringLength(100)]
public string Name { get; set; }
public int? GuardianID { get; set; }
[Column("MotherID")]
public int? MotherID { get; set; }
[Column("FatherID")]
public int? FatherID { get; set; }
[ForeignKey("MotherID")]
public virtual tblPerson Mother { get; set; }
[ForeignKey("FatherID")]
public virtual tblPerson Father { get; set; }
[ForeignKey("GuardianID")]
public virtual tblPerson Guardian { get; set; }
[InverseProperty("Guardian")]
[InverseProperty("Father")]
[InverseProperty("Mother")]
public virtual IEnumerable<tblPerson> …Run Code Online (Sandbox Code Playgroud) entity-framework fluent data-annotations self-referencing-table
数据库表:
我尝试了这种方法将类别表映射到EF核心:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>(entity =>
{
entity
.HasMany(e => e.Children)
.WithOne(e => e.Parent)
.HasForeignKey(e => e.ParentId);
});
}
Run Code Online (Sandbox Code Playgroud)
实体:
[Table("Category"]
public class Category : EntityBase
{
[DataType(DataType.Text), MaxLength(50)]
public string Name { get; set; }
public int? ParentId { get; set; }
public int? Order { get; set; }
[ForeignKey("ParentId")]
public virtual Category Parent { get; set; }
public virtual ICollection<Category> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在存储库中:
public override IEnumerable<Category> GetAll()
{
IEnumerable<Category> …Run Code Online (Sandbox Code Playgroud) c# sql categories self-referencing-table entity-framework-core
考虑构建论坛App的以下要求
家长邮报
- Child Post1
- Child Post1-1
- Child Post1-2
- Child Post1-2-1
- Child Post2
- Child Post
- Child Post3
Run Code Online (Sandbox Code Playgroud)
tblPost -
=====================
我可以使用递归CTE来检索这种数据.我不确定这是最好的方法.
问题
使用SQL检索此数据的最佳方法是什么?
有没有更好的方法使用ORM加载这些数据?
如果我们使用SQL路由,将此数据加载到类中的最佳方法是什么,如下所示:
public class Post {
public int PostId {get;set;}
public string PostTitle {get;set;}
public string PostContent {get;set;}
public string PostedBy {get;set;}
public IEnumerable<Post> ChildPosts {get;set;}
}
Run Code Online (Sandbox Code Playgroud)显示这种数据如何使用剃刀语法进行视图?
我被问到如何为表中引用表的主键的列创建hibernate映射.
例如,Employee表将EMP_ID作为主键,并且还具有MGR_ID列以了解员工的经理.由于经理也是员工,它将在同一个表中.因此,每个Employee行都有一个经理Id,它也是一个雇员.
请帮助我解决这种情况.谢谢.
我正在尝试为有序孩子设计双向父子设计。
从父级中删除子级(例如3个子级中的第2个子级)时,hibernate生成的sql导致唯一约束冲突,因为在“删除”(目标)之前执行了“更新”(同级)。
我使用的RDBMS(H2)不支持延迟约束。除了以下内容,我还有哪些选择?
有什么办法可以让休眠生成在“更新”之前带有“删除”的sql吗?
在论坛中发现了一些旧的讨论:
数据库架构:
CREATE TABLE IF NOT EXISTS Sequences (
ID BIGINT NOT NULL AUTO_INCREMENT,
Name LONGVARCHAR,
Type LONGVARCHAR,
Sequence LONGVARCHAR,
ParentId BIGINT DEFAULT NULL,
Index INT,
CONSTRAINT pk_SequenceId PRIMARY KEY (ID),
CONSTRAINT uc_Sequences UNIQUE (ParentId, Index),
CONSTRAINT fk_Sequences
FOREIGN KEY (ParentId)
REFERENCES Sequences(ID)
ON UPDATE CASCADE
ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
类:
public class Sequence {
protected Long ID;
protected String name;
protected String type;
protected String sequence;
protected Sequence parentSequence;
protected List<Sequence> childSequences …Run Code Online (Sandbox Code Playgroud) 我有primary key一个foreign key参考表和一个表same table primary key.即在同一张桌子上有父母和孩子.在sql sever中,删除规则有三个选项.但是只能设置"NO ACTION"删除规则.我知道不可能"cascade" delete因为周期和链接而设置.但为什么不允许其他选择呢?特别是那"SET NULL"一个.
现在我必须手动完成此操作.我必须找到子记录并将外键设置为null.之后我可以删除父母.为什么不能为它设置规则?
对不起,如果这是一个愚蠢的问题,但我有点像Django新手,无法找到答案.
我有一个带有自引用字段的Order模型:
source = models.ForeignKey(
'self',
help_text = "[redacted]",
verbose_name = "Source Order",
blank = True,
null = True,
)
Run Code Online (Sandbox Code Playgroud)
虽然如果我有一个订单并且我想知道它的来源,这可以正常工作,我还需要获得一个订单的"子"列表 - 也就是这个订单作为源的订单列表.这需要通过filter()s 完成还是有一个很好的,Django-y方式来做到这一点?
我按照http://bazalt-cms.com/ng-table/example/4的内容在ng-table中创建了一个过滤盒
我的代码与示例相同:在html中创建过滤器:
<table ng-table="tableParams" show-filter="true" class="table">
<tr ng-repeat="user in $data">
<td data-title="'Name'" filter="{ 'name': 'text' }">
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到布局:

但是我不想在表格中使用过滤器框,如下所示:

文件管理器在表格上方是我的过滤器框的代码:
<input type="text" ng-model="filter.name" />
<table ng-table="tableParams" show-filter="false" class="table">
<tr ng-repeat="user in $data">
<td data-title="'Name'" filter="{ 'name': 'text' }">
{{user.name}}
</td>
Run Code Online (Sandbox Code Playgroud)
...使用ng-model ="filter.name"来绑定,但它不起作用......
有没有办法实现我的想象力?
我想在 Entity Framework Core 中创建一对零或一对一的引用/父子关系。我的意思是我的实体可以有一个父级:
public class MyEntity
{
public Guid Id { get; set; }
public Guid? ParentEntityId { get; set; }
public MyEntity ParentEntity { get; set; }
public MyEntity ChildEntity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过 Fluent api 配置它:
entity.HasOne(x => x.ParentEntity)
.WithOne(x => x.ChildEntity)
.HasForeignKey( .... )
Run Code Online (Sandbox Code Playgroud)
我不明白我必须在最后一行写什么。我也不确定我的实体是否正确。
有人可以帮我吗?
编辑:这个问题不能解决我的问题:实体框架中的自引用/父子关系 我的问题是关于创建外键。此行不起作用:
.HasForeignKey(x => x.ParentEntityId)
Run Code Online (Sandbox Code Playgroud)
HasForeignKey需要输入一个字符串。
在构建迁移时,我收到以下错误:
无法确定由“Location”类型的导航属性“Location.NorthLocation”表示的关系。手动配置关系,或从模型中忽略此属性。
位置实体:
public class Location
{
public Guid Id { get; set; }
public DateTime CreatedWhen { get; set; }
public string CreatedBy { get; set; }
public DateTime ModifiedWhen { get; set; }
public string ModifiedBy { get; set; }
public Guid? NorthLocationId { get; set; }
public virtual Location NorthLocation { get; set; }
public Guid? SouthLocationId { get; set; }
public virtual Location SouthLocation { get; set; }
public Guid? EastLocationId { get; set; }
public …Run Code Online (Sandbox Code Playgroud) entity-relationship entity-framework one-to-one self-referencing-table entity-framework-core
所以这是我的问题......我试图创建的是一种自我引用的多对多关系。基本上这是我的模型。
public class InformationSystem
{
public InformationSystem()
{
Systems = new HashSet<InformationSystem>();
ParentSystems = new HashSet<InformationSystem>();
}
[Key()]
public int InformationSystemID { get; set; }
public string InformationSystemName { get; set; }
//Navigation properties
public virtual ICollection<InformationSystem> Systems { get; set; }
public virtual ICollection<InformationSystem> ParentSystems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这个想法是,一个系统可以有许多父母,而一个父母可以有许多孩子。我知道如何创建一个自引用实体,其中许多孩子可以有一个父母。让我困惑的是多对多的部分。下面是我的 DbContext。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<InformationSystem>(entity =>
{
entity
.HasMany(e => e.ParentSystems)
.WithMany(e => e.Systems)
.OnDelete(DeleteBehavior.Restrict);
});
Run Code Online (Sandbox Code Playgroud)
然而,在我的 DbContext 上,我收到一个错误,即 .WithMany 不包含 with Many 的定义,该定义将接受类型集合的输入。我知道,当代码首先创建迁移并更新数据库时,基本上需要构建的是链接表。我认为链接表有两列,没有键。一列是 InformationSystemID,一列是 …
c# many-to-many self-referencing-table entity-framework-core
我想定义一个具有自引用(或递归)外键的模型,使用SQLModel. (这种关系模式有时也称为邻接列表。)纯实现在SQLAlchemy其文档中进行了描述。
假设我想实现上面链接的示例中描述的基本树结构SQLAlchemy,其中我有一个Node模型,每个实例都有一个id主键、一个data字段(例如 type str)和对另一个实例的可选引用(读取外键)我们称之为其父节点(字段名称parent_id)的节点。
理想情况下,每个Node对象都应该有一个属性,如果该节点没有父节点,则该属性parent将为;None否则它将包含(指向)父Node对象的指针。
更好的是,每个Node对象都应该有一个属性,该属性是将其作为父对象引用的对象children列表。Node
问题是双重的:
实现这个的优雅方法是什么SQLModel?
我如何创建这样的节点实例并将它们插入数据库?
python sqlalchemy adjacency-list self-referencing-table sqlmodel
我有四列的表格 id, name, designation, manager_id.
表架构:
CREATE TABLE "Employee_Information"
(
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" varchar,
"designation" varchar,
"manager_id" integer references employee_information(id)
);
Run Code Online (Sandbox Code Playgroud)
如下
ID Name Designation Manager_id
-------------------------------------
1 Raja CEO
2 Mani CTO 1
3 Kavi COO 1
4 Murugan Head 3
5 Alpha Head(Fin) 4
7 Kannan Head 4
Run Code Online (Sandbox Code Playgroud)
员工层级如下:
Raja CEO
Mani CTO
Kavi COO
Murugan Head
Alpha Head(Fin)
Kannan Head
Beta CFO
Delta Head
Run Code Online (Sandbox Code Playgroud)
我想要一个 SQL 查询来显示特定员工的所有可能的经理。他的 Juniors 或其他下级员工姓名不应出现在结果集中。
显示同级别或更高级别的所有其他员工。
我无法为此找到解决方案。
sql ×4
c# ×2
database ×2
hibernate ×2
one-to-one ×2
python ×2
angularjs ×1
categories ×1
collections ×1
django ×1
fluent ×1
foreign-keys ×1
java ×1
javascript ×1
join ×1
many-to-many ×1
ngtable ×1
razor ×1
sql-server ×1
sqlalchemy ×1
sqlite ×1
sqlmodel ×1