Sim*_*mon 5 c# entity-framework code-first ef-code-first
我在使用 EF 代码优先创建数据库时遇到问题。我有一个实体播放器和一个实体炸船。
每个友谊都涉及两个玩家。其中一名玩家是友谊的发送者,另一位是友谊的接收者。
这是我的实体:
播放器.cs
public class Player
{
public int PlayerId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Email { get; set; }
[InverseProperty("Receiver")]
public virtual List<Friendship> FriendshipsIncoming { get; set; }
[InverseProperty("Sender")]
public virtual List<Friendship> FriendshipsOutgoing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
友谊.cs
public class Friendship
{
public int FriendshipId { get; set; }
public int SenderId { get; set; }
public int ReceiverId { get; set; }
[ForeignKey("Sender")]
public Player Sender { get; set; }
[ForeignKey("Receiver")]
public Player Receiver { get; set; }
[Required]
public bool Confirmed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试按照本教程中所示的方式实现关系: http://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in-code-first.aspx
当尝试使用“update-database”命令更新数据库时,我收到以下错误消息:
类型“Darta.WebApi.Models.Friendship”上的属性“Receiver”上的ForeignKeyAttribute 无效。在依赖类型“Darta.WebApi.Models.Friendship”上找不到外键名称“Receiver”。名称值应该是逗号分隔的外键属性名称列表。
我还尝试使用 fluid-api 修复问题,如下所示: http ://csharpwavenet.blogspot.sg/2013/06/multiple-foreign-keys-with-same-table.html
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Friendship>()
.HasRequired(b => b.Sender)
.WithMany(a => a.FriendshipsOutgoing)
.HasForeignKey(b=>b.SenderId);
modelBuilder.Entity<Friendship>()
.HasRequired(b => b.Receiver)
.WithMany(a => a.FriendshipsIncoming)
.HasForeignKey(b => b.ReceiverId);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误:
在表“Friendships”上引入 FOREIGN KEY 约束“FK_dbo.Friendships_dbo.Players_SenderId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。请参阅以前的错误。
您应该只需要 DataAnnotations或FluentAPI。你不需要两者。如果你想使用[ForeignKey]和[InverseProperty]属性,那么就去掉 FluentAPI 代码。
另请注意,在[ForeignKey]和[InverseProperty]属性中,您需要指定列的名称,而不是导航属性。
public class Player
{
public int PlayerId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Email { get; set; }
[InverseProperty("ReceiverId")]
public virtual ICollection<Friendship> FriendshipsIncoming { get; set; }
[InverseProperty("SenderId")]
public virtual ICollection<Friendship> FriendshipsOutgoing { get; set; }
}
public class Friendship
{
public int FriendshipId { get; set; }
public int SenderId { get; set; }
public int ReceiverId { get; set; }
[ForeignKey("SenderId")]
public Player Sender { get; set; }
[ForeignKey("ReceiverId")]
public Player Receiver { get; set; }
[Required]
public bool Confirmed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8582 次 |
| 最近记录: |