【发布时间】:2016-06-08 08:19:10
【问题描述】:
我正在创建 4 个表之间的关系:Provider、CostumerSite、DrmType 和 Drm。
在 Drm 表中有一个由其他 3 个表的主键组成的复合键。这是代码:
public partial class Provider
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProviderId { get; set; }
[StringLength(128)]
[Required]
public string Title { get; set; }
// one-to-many
public virtual ICollection<Content> Contents { get; set; }
public virtual Drm Drm { get; set; }
}
public partial class CustomerSite
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CustomerSiteId { get; set; }
[Required]
[StringLength(128)]
public string Name { get; set; }
[Required]
[StringLength(128)]
public string Username { get; set; }
[Required]
[StringLength(128)]
public string Password { get; set; }
// many-to-many
public virtual ICollection<Content> Contents { get; set; }
// one-to-one
public virtual Drm Drm { get; set; }
}
public partial class DrmType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DrmTypeId { get; set; }
[Required]
[StringLength(128)]
public string Name { get; set; }
// one-to-one
public virtual Drm Drm { get; set; }
}
public partial class Drm
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DrmId { get; set; }
// one-to-one relation
[Key, Column(Order = 1), ForeignKey("CustomerSite")]
public int CustomerSiteId { get; set; }
// one-to-one relation
[Key, Column(Order = 2), ForeignKey("Provider")]
public int ProviderId { get; set; }
// one-to-one relation
[Key, Column(Order = 3), ForeignKey("DrmType")]
public int DrmTypeId { get; set; }
public virtual Provider Provider { get; set; }
public virtual CustomerSite CustomerSite { get; set; }
public virtual DrmType DrmType { get; set; }
}
这是正确的吗?在此之后,我正在使用 onModel 函数:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Drm>()
.HasKey(d => new { d.ProviderId, d.CustomerSiteId, d.DrmType });
}
但是以这种方式,当我启动“Enable-Migrations -EnableAutomaticMigrations -Force”命令时,它会显示错误:
在模型生成过程中检测到一个或多个验证错误:
Drm_CustomerSite_Source: : 多重性在角色中无效 关系“Drm_CustomerSite”中的“Drm_CustomerSite_Source”。因为 Dependent Role 属性不是关键属性,上 从属角色的多重性的界限必须是“”。 Drm_Provider_Source: : 多重性在角色中无效 关系“Drm_Provider”中的“Drm_Provider_Source”。因为 Dependent Role 属性不是关键属性,上限 从属角色的多重性必须是''。
你能解释一下如何解决这个问题吗?谢谢
【问题讨论】:
-
现实中没有
1:1关系,一直是0-1:1,关系的一侧必须是可选的。
标签: c# sql-server entity-framework code-first entity-framework-migrations