Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
C# ReferentialConstraint中的依赖属性映射到存储生成的列_C#_Sql Server 2008_Linq To Sql_Entity Framework 4 - Fatal编程技术网

C# ReferentialConstraint中的依赖属性映射到存储生成的列

C# ReferentialConstraint中的依赖属性映射到存储生成的列,c#,sql-server-2008,linq-to-sql,entity-framework-4,C#,Sql Server 2008,Linq To Sql,Entity Framework 4,我在写入数据库时遇到以下错误: 引用约束中的从属属性映射到 存储生成的列。列:“PaymentId” 模式是: 此错误表示您正在使用不受支持的关系,或者映射中存在错误。您的代码很可能与错误完全无关 该错误意味着您在依赖实体中的外键属性定义为存储生成的实体之间存在某种关系。存储生成的属性将填充到数据库中。EF不支持将生成的属性存储为外键(以及主键中的计算属性)。是否可能在表之间定义了错误的列关系 在我的例子中,我有不同的列,其中一列被设置为自动数值。我也有同样的问题。根据这里提供的答案,我能够跟踪

我在写入数据库时遇到以下错误:

引用约束中的从属属性映射到 存储生成的列。列:“PaymentId”

模式是:


此错误表示您正在使用不受支持的关系,或者映射中存在错误。您的代码很可能与错误完全无关


该错误意味着您在依赖实体中的外键属性定义为存储生成的实体之间存在某种关系。存储生成的属性将填充到数据库中。EF不支持将生成的属性存储为外键(以及主键中的计算属性)。

是否可能在表之间定义了错误的列关系


在我的例子中,我有不同的列,其中一列被设置为自动数值。

我也有同样的问题。根据这里提供的答案,我能够跟踪它并解决它,但我有一个奇怪的问题,如下所述-它可能在未来帮助某人

在我的依赖表上,外键列已设置为StoreGeneratedPattern=“Identity”。我不得不把它改成“无”。不幸的是,在designer内部这样做根本不起作用

我查看了设计器生成的XML(SSDL),这些属性仍然存在,所以我手动删除了它们。我还必须修复数据库中的列(从createtablesql中删除标识(1,1))


之后,问题消失了。

重新检查付款与其他表/实体之间的关系。包括那些不应该包含PaymentId的,因为这是问题最可能隐藏的地方

在SQLServerManagementStudio中创建外键时,主键为默认值,并且在更改父表时会恢复此默认值,因此请注意在“表和列”窗口中按正确顺序更改值


此外,在修复了有问题的关系之后,很有可能模型上的简单“刷新”不会正确地从模型中删除有害的关系,并且即使在“修复”之后,您也会得到相同的错误,因此在执行刷新之前,请在模型中自己执行此操作。(我好不容易才发现。)

如果你检查过你的人际关系,并且关系良好


删除edmx中的表,然后从数据库更新。这将节省您手动执行更新的时间。

对于我来说,表中的外键放置错误,但即使在更改表以修复它之后,它仍然不起作用。您需要更新EDMX文件(不足以从模型中“刷新”表格,您需要在模型中删除并再次添加表格)。

除了接受的答案之外,如果您正在使用EF Reverse POCO generator或其他生成POCO的工具,请确保重新生成它们

我也遇到了同样的问题,在sql server中深入研究表设计之后,我发现我错误地将表的主键也设置为外键


在这幅图中,您可以看到JobID是表的主键,但也是错误的外键。

在我的例子中,问题是由具有双向1-1关系引起的:

class Foo{
[Key]
Id
[ForeignKey]
BarId
...
}
class Bar{
[Key]
Id
[ForeignKey]
FooId
...
}

我只需删除两个外键中的一个(无论如何都不是必需的)。

在我的情况下,只是我没有正确设置数据库的权限。我有一个只读集合,实体框架给了我一个引用约束错误,这让我很生气。添加了额外的写权限,一切正常。

在我的例子中,我有一个数据库生成的属性,以及一个ForeignKey导航属性,设置为引用1对1的相关表

这不是我可以删除的,我需要能够设置要由数据库生成的实体的主键,并且需要能够引用1对1表作为导航属性

不确定其他人是否也是这样,但这个问题只在创建新实体时出现,读取或编辑现有实体时没有出现问题,因此我通过创建继承版本的上下文并在创建时使用Fluent方法关闭导航属性来解决这个问题

因此,我的原始实体如下所示:

public partial class MyEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid id{ get; set; }


    // Navigation
    [ForeignKey("id")]
    public PathEntity Path { get; set; }
}
    private class _navPropInhibitingContext : EF.ApplicationDBContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<MyEntity>()
                .Ignore(e => e.Path);

        }
    }
因此,我创建了一个特殊的继承上下文,如下所示:

public partial class MyEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid id{ get; set; }


    // Navigation
    [ForeignKey("id")]
    public PathEntity Path { get; set; }
}
    private class _navPropInhibitingContext : EF.ApplicationDBContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<MyEntity>()
                .Ignore(e => e.Path);

        }
    }

希望这对某人有所帮助

我的问题是由配置中主键的冗余定义引起的

this
   .Property(p => p.Id)
   .HasColumnName(@"id")
   .IsRequired()
   .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // this is redundant when you want to configure a One-to-Zero-or-One relationship
   .HasColumnType("int");
删除此行

.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)


范例

这足以定义关系

// Configure Student & StudentAddress entity
modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address) // Mark Address property optional in Student entity
            .WithRequired(ad => ad.Student); // mark Student property as required in StudentAddress entity. Cannot save StudentAddress without Student
//配置学生和学生地址实体
modelBuilder.Entity()
.HasOptional(s=>s.Address)//在学生实体中将地址属性标记为可选
.WithRequired(ad=>ad.Student);//按照StudentAddress实体中的要求标记Student属性。没有学生地址,无法保存学生地址

在我的案例Id字段中,FK仅在实体框架中,相应的“StoreGeneratedPattern”设置为“Itentity”,而不是“None”

我可以在sql server中添加具有相同信息的行。当你说Store Generated时,你能举个例子吗?EF不是SQL Server。它有自己的局限性。只需找到在何处使用任何名为
PaymentID
的DB生成的FK属性,并对其进行处理。好的,我们有一个paymenthistory表,它将PaymentID作为外键,我是否需要在其中添加一行?这不是关于添加行,而是关于列的定义。如何设置该列?只需单击visual studio中的关系模型,im获取的名称“Payment”不能用于类型“Payment”。成员名称不能与其封闭类型相同。任何想法我错误地将我的外键之一作为标识(自动递增)。这就是我犯的错误。啊!我将关系的外键部分作为默认giv