2017-08-14 4 views
0

さらに、驚くべきエンティティフレームワークは単純で単純なものを作ることができませんでした...私は本当に基本的なモデル、会社、郡、ユーザーのM:1の関係を作成しました会社とだから私は私が好きなテーブルデザインを生成すると思うCompanyUsersと呼ばれる余分なテーブルを持っています。エンティティフレームワークの列はヌルを許可しません。

しかし、私はIDを設定していても、私はnull UserIdを持つことができないと主張するデータベースに基本ユーザーを入力することはできません。

私のテーブルデザインは奇妙だと理解していますが、最終的にはM:Mの関係に切り替えることができます。第2に、3つのテーブルにデータを格納すると、結合のためSQLクエリを簡単に作成できます。

正確なエラー:

System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'UserId', table 'SSI.Database.Context.Software.dbo.Users'; column does not allow nulls. INSERT fails.

シード:

var _company = new Company() 
{ 
    CompanyId=1, 
    Name="Company Inc." 
}; 

var _counties = new List<County>() { 
    new County(){ Name="Place1" }, 
    new County(){ Name="Place2"} 
}; 

context.Companies.AddOrUpdate(_company); 

var _user = new User() {UserId=1, CompanyId=_company.CompanyId, Company=_company, Name = "John Smith" }; 


if (context.Counties.Count() == 0) 
{ 
    context.Counties.AddRange(_counties); 
} 

context.Users.AddOrUpdate(_user); 

すべての私のモデル:

会社:

public class Company 
{ 

    public Company() 
    { 
     Users = new List<User>(); 
    } 

    [Key] 
    public int CompanyId { get; set; } 
    public string Name { get; set; } 

    public ICollection<User> Users { get; set; } 
} 

ユーザー:

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string Name { get; set; } 


    public Nullable<int> CompanyId { get; set; } 

    [ForeignKey("CompanyId")] 
    public Company Company { get; set; } 
} 

CompanyUser表:あなたのIDは自動的にデータベースによって生成された場合

public class CompanyUsers 
{ 
    [Key] 
    [Column(Order = 1)] 
    public int CompanyId { get; set; } 
    [ForeignKey("CompanyId")] 
    public virtual Company Company { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public int UserId { get; set; } 
    [ForeignKey("UserId")] 
    public virtual User User{ get; set; } 
} 
+0

あり、以下にスクリプトを追加してみてください自動生成されるはずのもののIDを設定しようとしていますか? – Kritner

+0

ユーザーIDにIDを使用しています。 DBのIDフィールドとして設定しましたか? –

+0

まだ空白のままにしておくとエラーになります。 –

答えて

0

、ユーザクラス

[DatabaseGenerated(DatabaseGeneratedOption.None)]なぜあなたは

関連する問題