Kir*_*eed 6 ef-code-first entity-framework-6
我想创建一个自引用文件夹表和相关的文件表
如MyFolder1和MyFile1所示.

我了解如何通过继承接口来获得此结构.
是否也可以通过继承抽象类来实现?
public class Model1Context : DbContext
{
public Model1Context()
: base("name=Model1")
{
Database.SetInitializer(new Model1Initializer());
}
public virtual DbSet<MyFolder1> MyFolder1s { get; set; }
public virtual DbSet<MyFile1> MyFile1s { get; set; }
public virtual DbSet<MyFolder2> MyFolder2s { get; set; }
public virtual DbSet<MyFile2> MyFile2s { get; set; }
}
public class Model1Initializer : DropCreateDatabaseIfModelChanges<Model1Context>
{
}
public class MyFolder1 : BasicBO, ISequencedTreeNode
{
public MyFolder1 MyFolder { get; set; }
public int SeqNo { get; set; }
[NotMapped]
public ISequencedTreeNode Parent
{
get
{
return MyFolder;
}
set
{
MyFolder = (MyFolder1)value;
}
}
}
public class MyFile1 : BasicBO, ISequencedTreeNode
{
public MyFolder1 MyFolder { get; set; }
public int SeqNo { get; set; }
[NotMapped]
public ISequencedTreeNode Parent
{
get
{
return MyFolder;
}
set
{
MyFolder = (MyFolder1)value;
}
}
}
public interface ISequencedTreeNode
{
[Required]
int SeqNo { get; set; }
ISequencedTreeNode Parent { get; set; }
}
public abstract class SequencedTreeNode : BasicBO
{
[Required]
public int SeqNo { get; set; }
public SequencedTreeNode Parent { get; set; }
}
// [Table("MyFolder2")]
public class MyFolder2 : SequencedTreeNode
{
}
// [Table("MyFile2")]
public class MyFile2 : SequencedTreeNode
{
}
public class BasicBO
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将BasicBO标记为抽象似乎不会影响表构造.
[更新]我可以通过向MyFile2和MyFolder2添加[Table('tablename')]属性来强制TPT,但是这些表将只有一个Id字段,而SequencedTreeNodes表仍然会创建.
对我来说,一个接口在强制TPT方面可能更有效是有道理的,因为总是需要为接口实现属性.但是,如果我在SequencedTreeNode摘要中创建所有属性,我会认为会发生同样的事情.但是,如果我这样做,我得到一个运行时错误'属性'SeqNo'不是'MyFile2'类型的声明属性
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |