小编Moh*_*oho的帖子

首先了解实体框架代码中的ForeignKey属性

有关背景信息,请参阅以下帖子:

实体框架一到零或一个没有导航属性的关系

我一直认为这ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("DeferredDataId")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我在链接的帖子上发现这是不对的,因为DeferredData的主键被称为Id我实际需要:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("Id")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ForeignKey用于指向其他类.

然后我继续改变其他一些参考文献:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework foreign-keys code-first shared-primary-key

26
推荐指数
1
解决办法
7万
查看次数

在对象内的对象上的实体框架LINQ表达式

编辑此问题,以期使其更清楚。

我们有实体框架代码优先设置。为了示例目的,我简化了两个类,实际上,与“记录”类似,大约有十多个类,其中“项”是导航属性/外键。

物品类别:

public class Item
{
    public int Id { get; set; }
    public int AccountId { get; set; }
    public List<UserItemMapping> UserItemMappings { get; set; }
    public List<GroupItemMapping> GroupItemMappings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

记录类:

public class Record 
{
    public int ItemId { get; set; }
    public Item Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

this.User是每个存储库中注入的用户对象,包含在存储库库中。我们有一个包含以下代码的Item存储库:

var items = this.GetAll()
    .Where(i => i.AccountId == this.User.AccountId);
Run Code Online (Sandbox Code Playgroud)

我在存储库的基础上创建了follow表达式,以轻松地对其进行过滤(以希望再次使用)。由于LINQ to实体的工作方式,我们无法使用静态扩展方法(System.NotSupportedException“ LINQ to Entities无法识别方法X,并且该方法无法转换为存储表达式。”)。

protected Expression<Func<Item, bool>> ItemIsOnAccount()
{
    return item => item.AccountId …
Run Code Online (Sandbox Code Playgroud)

c# linq expression entity-framework repository

10
推荐指数
2
解决办法
302
查看次数