2016-04-29 14 views
1

これらは私の2つの単純化されたエンティティコード最初の外部キーの競合

public class Team 
{ 
    public int TeamId { get; set; } 

    public string Name { get; set; } 

    public User User { get; set; } 

    public int UserId { get; set; } 
} 

チームエンティティの設定です:

HasRequired(t => t.User) 
      .WithOptional(u => u.Team); 

Userクラス:

public class User 
{ 
    public int UserId { get; set; } 

    public string Username { get; set; } 

    public Team Team { get; set; } 

    public int TeamId { get; set; } 
} 

私はその簡単なデモコンソールアプリケーションを作りましたユーザーをdbに挿入し、主キーを取得して、外部キーがデータベースにあることを確認します。

static void Main(string[] args) 
    { 
     var test = new InsertTest(); 
     var userId = test.InsertUser(); 
     test.InsertTeam(userId); 
    } 
public int InsertUser() 
    { 
     var user = new User(); 
     user.Username = "test1"; 
     user.Email = "[email protected]"; 
     user.Name = "test"; 
     user.LastName = "Test"; 
     user.Password = "123"; 
     user.ConfirmPassword = "123"; 
     UnitOfWork.UseRepository.Insert(user); 
     UnitOfWork.Save(); 

     var userdB = UnitOfWork.UseRepository.Get().Where(u => u.Name == "test").FirstOrDefault(); 

     return userdB.UserId; 
    } 

public void InsertTeam(int userId) 
    { 
     var team = new Team(); 

     team.Name = "Test"; 
     team.UserId = userId; 

     UnitOfWork.TeamRepository.Insert(team); 
     UnitOfWork.Save(); 
    } 

しかし、私はデータベースにチームを挿入している間にも、外部キーの競合が発生します。実際には次に何をするかわからない

例外: INSERTステートメントがFOREIGN KEY制約 "FK_dbo.Teams_dbo.Users_TeamId"と競合しました。競合は、データベース "Fantasy"、テーブル "dbo.Users"、列 "UserId"で発生しました。 ステートメントが終了しました。

+0

に変更する必要があるかもしれません

HasOptional(c => c.User) .WithRequired(c => c.Team) .Map(m => m.MapKey("_field")); 

にあなたのチームのエンティティの設定を変更する

?それは私たちを助けるかもしれない詳細を持っているはずです。 – Tim

+0

質問に追加しました – Dolja

+0

あなたのモデルは論理的に間違っています。チームは多くのユーザーを持つことができます。 1対1のリレーシップがある – CodeNotFound

答えて

0
はまた、あなたはあなたの実際の例外を一覧表示することができます

public User User { get; set; } and 
public Team Team { get; set; } 

public virtual User User { get; set; } and 
public virtual Team Team { get; set; } 
+0

_field:テーブル内の関係フィールドの名前 また、私はあなたの特産品の名前を変更することをお勧めします:Team.TeamId to Team.IDなど – FelipeDrumond

+0

ユーザーはチームエンティティチームはユーザーの中ではオプションですが、HasOptionalについては確かですか? – Dolja