[英]Create EF Foreign Key Through Fluent API
Entity Framework isn't reacting to my data annotation changes in this particular scenario, so I want to try through Fluent API, which I never use. 在这种特定情况下,Entity Framework对我的数据注释更改没有反应,因此我想尝试使用我从未使用过的Fluent API。
I have a model "Transfer" which has three properties - its Id and "TransferredFromId" and "TransferredToId" properties, which represent Users (another EF model) involved in the transfer. 我有一个模型“ Transfer”,它具有三个属性-其Id,“ TransferredFromId”和“ TransferredToId”属性,它们表示参与转移的用户(另一个EF模型)。 Like so:
像这样:
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; }
}
The user model currently looks like this: 用户模型当前如下所示:
public class User
{
public long Id { get; set; }
[InverseProperty("TransferredFrom")]
public ICollection<Transfer> TransferredFroms { get; set; }
[InverseProperty("TransferredTo")]
public ICollection<Transfer> TransferredTos { get; set; }
}
Note - I think user can look like this and it would still work: 注意-我认为用户可以看起来像这样,并且仍然可以使用:
public class User
{
public long Id { get; set; }
}
How do I achieve the exact same thing through Fluent API? 我如何通过Fluent API达到完全相同的目的?
To clarify, I want to have a transfer table which has two properties, which both represent the Id from the Users table. 为了澄清,我想有一个包含两个属性的转移表,这两个属性均表示Users表中的ID。
Temporary edit: Should my models look like this when I switch to Fluent API? 临时编辑:当我切换到Fluent API时,我的模型应该是这样吗?
public class Transfer
{
public long Id { get; set; }
public long TransferredFromId { get; set; }
public long TransferredToId { get; set; }
}
and 和
public class User
{
public long Id { get; set; }
}
and then add this in context? 然后在上下文中添加它?
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);
two possibilities, depending on which side you want to start on. 两种可能性,取决于您要从哪一侧开始。
first, you have to override the OnModelCreating() method in your context. 首先,您必须在上下文中重写OnModelCreating()方法。
your two options should look like: 您的两个选项应如下所示:
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);
and 和
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);
each Set of these 2 lines should have the same semantics as your data annotation mapping. 这2行的每个Set应该具有与数据注释映射相同的语义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.