可选的一个关系有多少可能吗?

时间:2015-12-09 15:58:16

标签: c# entity-framework

我遇到以下情况:Device可以有多个Subscriptions,但Subscription最多只有一个Device或根本没有Subscriptions。在我的数据库DeviceID中有一个外键Nullable,它是ID(不是Device类中的 modelBuilder.Entity<Device>() .HasMany(e => e.Subscriptions) .WithRequired(e => e.Device) .WillCascadeOnDelete(false); 属性)。目前由于某种原因,以下流利的代码工作:

.WithRequired(...)

如果我选择WithOptional(),这应该是合乎逻辑的,我会收到错误。错误是这个ModelvalidationError:

  

其他信息:在模型生成期间检测到一个或多个验证错误:

     

Entities.Device_Subscriptions ::多重性与   角色'Device_Subscriptions_Source'中的引用约束   关系'Device_Subscriptions'。因为所有的属性   依赖角色是不可空的,校长的多样性   角色必须为'1'。

但是如果我现在查询例子(使用db.Subscriptions.Where(s => s.DeviceID == null).Count(); 代码)

Subscription

我得到零,尽管我的数据库中有一个DeviceIDDevice为null。

(部分)public class Device { public Device() : base() { Subscriptions = new HashSet<Subscription>(); } [Key] public decimal DeviceID { get; set; } public virtual ICollection<Subscription> Subscriptions {get; set;} } 的模型:

Subscription

(部分)public partial class Subscription { [Key] [Column(Order = 0)] public decimal? DeviceID { get; set; } [Key] [Column(Order = 1)] [StringLength(50)] public string Type { get; set; } public virtual Device {get; set;} } 的模型:

YourController < ApplicationController
  layout false

1 个答案:

答案 0 :(得分:1)

[Key]属性用于声明实体的主键。作为PK的一部分具有可以为空的值并不是真的有意义。

从评论中看来,您真正希望实现的目标是(DeviceID,Type)上有索引。在EF 6.1中,他们添加了应该完成此任务的[Index]属性。 Reference