我想要一个在mysql(版本5.7.20)中使用ef(版本6.0)的自引用表。
mysql表:
Create table Category
id int(11) Primary Key,
name varchar(50),
ParentId int(11) Default Null,
PRIMARY KEY (`id`),
KEY`Parent_Key` (`ParentId`),
CONSTRAINT`Parent_Key` FOREIGN KEY (`ParentId`) REFERENCES`Category` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
ef代码:
public class Category
{
public int Id {get; set;}
public string Description {get; set;}
public int? ParentId {get; set;}
public virtual Category Parent {get; set;}
public virtual ICollection<Category> Children {get; set;}
};
ef模型配置
CategoryConfiguration()
{
this.HasKey(e => new {e.id})
this.Property(e => e.id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.HasOptional(e => e.Parent) .WithMany(e => Children) .HasForeignKey(e => new {e.id, e.ParentId); }
这是运行代码的框架,它运行时不会出错。问题是当我通过linq\u db.categories获取类别时;父属性和子列表总是空的,即使我添加了include子句。
ps:如果将类别设置为父类别,则parentid是idcategory值。
有人能告诉我我的代码和配置有什么问题吗?或者这是只能在sqlserver中获取而不能在mysql中获取工作。
1条答案
按热度按时间c9x0cxw01#
我认为你复制/粘贴并更改了代码,所以它不是你真正的应用程序。你的配置有点奇怪(2个键)。
无论如何,这里有一个mysql的工作示例
上下文
model(与您的相同,但是我添加了children集合的初始化
测试应用程序(如果您运行超过1次,您将收到一个异常,因为您将有6个孩子)。