【发布时间】:2014-07-01 18:01:30
【问题描述】:
我的问题看起来很简单。我需要实现数据库中项目之间的关系。例如:计算机和软件等实体之间的关系向用户表明计算机存储特定软件,类似地 - 软件安装在特定计算机中。我想我应该用源 id 和目标 id 或类似的东西来实现一个实体。我首先在EntityFramework 6中使用代码编写了一些代码。这里有两个类:
public class ConfigurationItem
{
public int Id { get; set; }
public String Name { get; set; }
public String DeploymentState { get; set; }
public String IncidentState { get; set; }
[DataType(DataType.MultilineText)]
public String Description { get; set; }
[DataType(DataType.MultilineText)]
public String Note { get; set; }
public virtual ICollection<Relationship> Relationship { get; set; }
}
public class Relationship
{
[Key]
public int RelationshipId { get; set; }
[ForeignKey("ConfigurationItem")]
public int SourceId { get; set; }
[ForeignKey("ConfigurationItem")]
public int TargetId { get; set; }
public String Type { get; set; }
public virtual ConfigurationItem Source { get; set; }
public virtual ConfigurationItem Target { get; set; }
}
此解决方案不起作用。我需要一个小费或什么我应该尝试使它正常工作。 EF 抛出关于外键的错误:
类型“cms_1.Models.Relationship”的属性“SourceId”上的 ForeignKeyAttribute 无效。在依赖类型“cms_1.Models.Relationship”上找不到导航属性“ConfigurationItem”。 Name 值应该是有效的导航属性名称。
当我尝试解决它时,EF 会引发有关级联删除的错误。我知道如何禁用它,但我只是不想。我需要具有该功能的适当解决方案,但我认为我不知道如何制作代表给定场景的模型。
很简单——我需要将实体“A”的两个外键存储在实体“B”中。怎么可能?
【问题讨论】:
-
你在使用迁移吗?
-
是的,几分钟前我找到了解决方案。我在 ConfigurationItem 中编写了两个导航属性,代码运行成功,但我不知道它是否以我希望它工作的方式完成
标签: c# asp.net-mvc entity-framework code-first