我遇到以下情况: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
我得到零,尽管我的数据库中有一个DeviceID
,Device
为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
答案 0 :(得分:1)
[Key]
属性用于声明实体的主键。作为PK的一部分具有可以为空的值并不是真的有意义。
从评论中看来,您真正希望实现的目标是(DeviceID,Type)上有索引。在EF 6.1中,他们添加了应该完成此任务的[Index]
属性。 Reference