我有一个实体User
,其中有两个属性CreatedBy
和UpdatedBy
都引用User
。默认情况下,EF假定这两者是彼此一对一的关系。我收到以下错误消息:
消息:System.InvalidOperationException:无法确定在“User.CreatedBy”和“User.UpdatedBy”之间检测到的一对一关系的子/依赖方。要标识关系的子/依赖方,请配置外键属性。如果这些导航不应该是相同关系的一部分,则在不指定反向的情况下配置它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=724062。
目前,我有一个这样的课程:
public class User
{
public int Id { get; set; }
public int? CreatedById { get; set; }
public User CreatedBy { get; set; }
public int? UpdatedById { get; set; }
public User UpdatedBy { get; set; }
}
基本上,我正在尝试这里:
CreatedBy
,并且任意数量的用户都可以拥有相同的UpdatedBy
。 如何让EF忽略导航属性?我CreatedBy
的主要原因是我以后可以使用Include(u => u.CreatedBy)
。我知道使用IEnumerable<User> AllCreatedUsers
属性可以解决这个问题,但我不想为我的实体中的每个创建一个IEnumerable
。有没有办法用流畅的API做到这一点?
以下是我的尝试:
modelBuilder.Entity<User>()
.Property<IEnumerable<User>>("AllCreatedUsers");
modelBuilder.Entity<User>().HasOne(u => u.CreatedBy)
.WithMany(u => EF.Property<IEnumerable<User>>(u, "AllCreatedUsers"));
答案 0 :(得分:4)
您需要使用无参数WithMany
方法重载来配置两个Single Navigation Property关系:
modelBuilder.Entity<User>()
.HasOne(u => u.CreatedBy)
.WithMany();
modelBuilder.Entity<User>()
.HasOne(u => u.UpdatedBy)
.WithMany();
答案 1 :(得分:1)
这两个属性的public class User
{
public int Id { get; set; }
public int? CreatedById { get; set; }
[ForeignKey("CreatedById")]
public User CreatedBy { get; set; }
public int? UpdatedById { get; set; }
[ForeignKey("UpdatedById")]
public User UpdatedBy { get; set; }
}
数据注释。
$queue = new Queue(QUEUE_NAME, unserialize(AWS_CREDENTIALS));
// Continuously poll queue for new messages and process them.
while (true) {
$message = $queue->receive();
if ($message) {
try {
$message->process();
$queue->delete($message);
} catch (Exception $e) {
$queue->release($message);
echo $e->getMessage();
}
} else {
// Wait 20 seconds if no jobs in queue to minimise requests to AWS API
sleep(20);
}
}