通过Fluent API

时间:2015-09-27 19:25:22

标签: c# entity-framework

实体框架对此特定场景中的数据注释更改没有反应,因此我想尝试使用Fluent API,这是我从未使用过的。

我有一个模特"转移"它有三个属性 - 它的Id和" TransferredFromId"和" TransferredToId"属性,表示传输中涉及的用户(另一个EF模型)。像这样:

public class Transfer
{
    public long Id { get; set; }

    public long TransferredFromId { get; set; }
    [ForeignKey("TransferredFromId")]
    public User TransferredFrom { get; set; }

    public long TransferredToId { get; set; }
    [ForeignKey("TransferredToId")]
    public User TransferredTo { get; set; }
}

用户模型目前如下所示:

public class User 
{
    public long Id { get; set; }

    [InverseProperty("TransferredFrom")]
    public ICollection<Transfer> TransferredFroms { get; set; }

    [InverseProperty("TransferredTo")]
    public ICollection<Transfer> TransferredTos { get; set; }
}

注意 - 我认为用户看起来像这样,它仍然可以工作:

public class User 
{
    public long Id { get; set; }
}

如何通过Fluent API实现完全相同的功能?

为了澄清,我希望有一个包含两个属性的转移表,它们都代表Users表中的Id。

临时编辑:当我切换到Fluent API时,我的模型应该是这样的吗?

public class Transfer
{
    public long Id { get; set; }

    public long TransferredFromId { get; set; }

    public long TransferredToId { get; set; }
}

public class User 
{
    public long Id { get; set; }
}

然后在上下文中添加它?

        modelBuilder.Entity<Transfer>().HasRequired(x => x.TransferredFrom).WithMany(x => x.TransferredFroms).HasForeignKey(x => x.TransferredFromId);
        modelBuilder.Entity<Transfer>().HasRequired(x => x.TransferredTo).WithMany(x => x.TransferredTos).HasForeignKey(x => x.TransferredToId);

1 个答案:

答案 0 :(得分:3)

两种可能性,取决于您想要开始的那一方。

首先,您必须覆盖上下文中的OnModelCreating()方法。

您的两个选项应如下所示:

modelBuilder.Entity<Transfer>().HasRequired(x=>x.TransferredFrom).WithMany(x=>x.TransferredFroms).HasForeignKey(x=>x.TransferredFromId);
modelBuilder.Entity<Transfer>().HasRequired(x=>x.TransferredTo).WithMany(x=>x.TransferredTos).HasForeignKey(x=>x.TransferredToId);

modelBuilder.Entity<User>().HasMany(x=>x.TransferredFroms).WithRequired(x=>x.TransferredFrom).HasForeignKey(x=>x.TransferredFromId);
modelBuilder.Entity<User>().HasMany(x=>x.TransferredTos).WithRequired(x=>x.TransferredTo).HasForeignKey(x=>x.TransferredToId);

这两行中的每一行都应该与数据注释映射具有相同的语义。