Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架代码首先添加额外的外键_Entity Framework_Ef Code First_Foreign Keys_Entity Framework Migrations - Fatal编程技术网

Entity framework 实体框架代码首先添加额外的外键

Entity framework 实体框架代码首先添加额外的外键,entity-framework,ef-code-first,foreign-keys,entity-framework-migrations,Entity Framework,Ef Code First,Foreign Keys,Entity Framework Migrations,我对EF代码优先的方法是完全陌生的,我面临着关于我的表的迁移结果的问题Histories 我希望历史记录表具有用户外键(0..*关系:用户可以没有或有多个历史记录): 我正在使用数据注释,但也尝试了OnModelCreating方法,但没有成功 我读了很多帖子,尤其是这篇()但是找不到有效的解决方案 有人能解释一下我做错了什么,错过了什么吗 非常感谢。我终于知道发生了什么事。实际上需要InverseProperty,否则会创建更多的外键,但问题是由于User其他分部类中的此属性造成的: publ

我对EF代码优先的方法是完全陌生的,我面临着关于我的表的迁移结果的问题Histories

我希望
历史记录
表具有
用户
外键(0..*关系:用户可以没有或有多个历史记录):

我正在使用
数据注释
,但也尝试了
OnModelCreating
方法,但没有成功

我读了很多帖子,尤其是这篇()但是找不到有效的解决方案

有人能解释一下我做错了什么,错过了什么吗


非常感谢。

我终于知道发生了什么事。实际上需要
InverseProperty
,否则会创建更多的外键,但问题是由于
User
其他分部类中的此属性造成的:

public List<History> History
    {
        get
        {
            return Histories.OrderByDescending(h => h.Clock).ThenBy(h => h.Type).ToList();
        }
    }
公共列表历史记录
{
得到
{
返回history.OrderByDescending(h=>h.Clock).ThenBy(h=>h.Type.ToList();
}
}
添加
[NotMapped]
属性起到了作用,并阻止了添加额外的外键。

我不知道没有设置
的属性会被视为列,但似乎是这样的情况导致了这个问题。

您可以这样使用fluent API:

modelBuilder.Entity<History>().HasRequired(x=> x.User).WithMany(x=> x.Histories).HasForeignKey(x=> x.UserId);
modelBuilder.Entity<User>().HasMany(x=> x.Histories).WithRequired(x=> x.User).HasForeignKey(x=> x.UserId);
modelBuilder.Entity().HasRequired(x=>x.User)。有许多(x=>x.history)。HasForeignKey(x=>x.UserId);
modelBuilder.Entity().HasMany(x=>x.Histories).WithRequired(x=>x.User).HasForeignKey(x=>x.UserId);

没有setter的属性与
[NotMapped]
属性具有相同的行为。

请尝试删除[InverseProperty(“用户”)]。另一个部分类中有什么?模型和配置看起来不错。尝试重新生成迁移。@tmg:删除
InverseProperty
会再添加一个外键(有UserId、User\u Id和User\u Id1)@伊万:我已经删除了数据库,删除了
Migrations
文件夹,并添加了
migrationinit
。这两个类实际上包含更多的属性,是否有可能涉及其中一个?
public List<History> History
    {
        get
        {
            return Histories.OrderByDescending(h => h.Clock).ThenBy(h => h.Type).ToList();
        }
    }
modelBuilder.Entity<History>().HasRequired(x=> x.User).WithMany(x=> x.Histories).HasForeignKey(x=> x.UserId);
modelBuilder.Entity<User>().HasMany(x=> x.Histories).WithRequired(x=> x.User).HasForeignKey(x=> x.UserId);