コードの最初の私は外国キーの例外で狂った運転

これらは私のモデルクラスです:

public class Organization
{
        public Organization()
        {
        }

        [DisplayName("Organization Id")]
        public int OrganizationId { get; set; }

        [StringLength(128)]
        [DisplayName("Organization Name")]
        public string Name { get; set; }
}

public class User 
{
        public User()
        {
            Roles = new List();
        }

        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        [Key]
        public Guid UserGuid { get; set; }

        [StringLength(25)]
        public string FirstName { get; set; }

        [StringLength(25)]
        public string LastName { get; set; }

        public virtual List Roles { get; set; }

        public int OrganizationId { get; set; }

        [ForeignKey("OrganizationId")]
        public virtual Organization Organization { get; set; }
    }

これは私のコードです:

 Organization organization = new Organization { Name = "Test", };
 context.Organizations.Add(organization);

そして、私はこれを得る:

INSERT文がFOREIGN KEY制約と競合しました    “Organization_Users
“競合がデータベースで発生しました    “SampleDB “、テーブル
“dbo.Organizations “、列   ’OrganizationId’。 r
n文が終了しました。

これは奇妙じゃない?私は組織を追加するだけです。これにはどんな問題がありますか?

P.S: My user table does have
OrganizationId that is foreign key and pointing to
Organization table. So far so good but why is the
exception thrown? I am adding a master Organization
record. How does that violate foreign key constraint?

ベストアンサー

私は、組織のデータベースIDも生成されることを期待しています:

   [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
   [DisplayName("Organization Id")]
   public int OrganizationId { get; set; }

それを保存する前に、有効な独自の値に設定する必要があります

代替推測:

Organization_Users
という名前は、(おそらくリレーションテーブルを介して)組織テーブルから第三者へのリレーションがある(またはあった)ことを示します。あなたは完全なコードを見せましたか?この古い関係の残骸がデータベースにコード化されていますか?使用されていないフィールド/リレーションが実際のデータベーススキーマから削除されるまで、C#コードからそのような関係を削除するだけでは不十分です(データベースが制約をチェックし続けるためです)。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です