三个建议,第一个没试过,看看是否有效:
建议 #1 将具有 FK 属性的外键添加到模型中,例如:
public Permission
{
public Guid Id {get; set;}
public string Name {get; set;}
[ForeignKey("Action")]
public int ActionId {get; set;}
public Action Action {get; set;}
}
然后尝试:
var permission = (from p in context.Permissions.Include(p => p.Action)
where p.ActionId == actionId
select p).Single();
建议 #2 可以在这里找到:
EF 4.1:.WithMany() 和 .WithOptional() 之间的区别?
建议#3
我们有类似的模式,但我们让双方都了解对方。您是否有充分的理由不想在 Action 中包含 Permission 导航属性?您可以执行以下操作:
public Action
{
public Guid Id {get; set;}
public string Name {get; set;}
// notice the FK is nullable
public int? PermissionId {get; set;}
public Permission {get; set;}
}
以下是我们构建模型的方式,每个 Document 与 DocumentType 有 1..1 的关系:
public class Document
{
#region " Mutually exclusive document type relationships, necessary for setting up shared primary key in db "
public BindingAgreement BindingAgreement { get; set; }
public CeoLetter CeoLetter { get; set; }
public Email Email { get; set; }
....
#endregion
//other code
}
Public class BindingAgreement
{
public Document {get;set;}
// other code
}
Public class CeoLetter
{
public Document {get;set;}
// other code
}
Public class Email
{
public Document {get;set;}
// other code
}
然后在我的模型构建器中我这样做:
//Binding Agreement
modelBuilder.Entity<BindingAgreement>().HasRequired(c => c.Document);
//Ceo Letter
modelBuilder.Entity<CeoLetter>().HasRequired(c => c.Document);
//Email
modelBuilder.Entity<Email>().HasRequired(c => c.Document);
除此之外,我使用整数作为我的主键,但我不明白为什么这是一个因素。
如果您可以拥有无权限的操作,我也不确定您是否需要删除级联。如果您不能拥有无 oa 权限的操作,则需要使用 (Has/With)Required fluent map 或通过以允许 CF 解释您的意图的方式显式构建代码来表明这一点。
稍后我将尝试前两个建议,并让您知道我的结果。