我正在开发一个有两个类和一个基类的项目。基类拥有 Projects 和 Programs 模型之间的所有公共属性。项目通过 ProgramID 列与 Programs 相关联。Projects 有一个 ProgramID 的可编辑字段,让用户选择他们想要将项目关联到的程序(并非所有项目都有程序,这就是它可以为空的原因)。
本质上,我希望项目能够读取和写入数据库,而程序只能读取(未设置)。这可以通过 TPC 继承实现吗?欢迎任何建议。如果需要更多信息,我很乐意提供。预先感谢您的帮助!
基类
public abstract class PMBase
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int ProjectID { get; set; }
public virtual int? ProgramID { get; set; }
public virtual Program Program { get; set; }
//Omitted rest of Model
}
程序类
public class Program : PMBase
{
[Column("PMGroupID")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public override int? ProgramID { get { return ProjectID; } set { value = null; } }
//NOTE: Database column names were from legacy changes. I wish we could change this, but we do not have time.
[Column("ProgramID")]
public override int ProjectID { get; set; }
public virtual ICollection<PMBase> Projects { get; set; }
//Omitted rest of Model
}
项目类
public class Project : PMBase
{
[Display(Name = "Program Number & Name")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public override int? ProgramID { get; set; }
//Omitted rest of Model
}
数据库上下文映射
modelBuilder.Entity<Project>()
.Map(prj =>
{
prj.MapInheritedProperties();
prj.ToTable("Projects");
});
modelBuilder.Entity<Program>()
.Map(pgm =>
{
pgm.MapInheritedProperties();
pgm.ToTable("Programs");
});
modelBuilder.Entity<PMBase>()
.HasOptional(prj => prj.Program)
.WithMany(pgm => pgm.Projects)
.HasForeignKey(prj => prj.ProgramID);
看到的错误消息
在尝试各种事情时会看到这些错误。当我看到UNION错误时,我觉得我很接近,但似乎无法克服它。
无法修改列 \"PMGroupID\",因为它是计算列或 UNION 运算符的结果。
覆盖外键组件“ProgramID”不是类型“Project”上的声明属性。验证它没有被明确地从模型中排除并且它是一个有效的原始属性。
无法确定相关操作的有效顺序。由于外键约束、模型要求或存储生成的值,可能存在依赖性。
慕田峪9158850
相关分类