1

私は、データベース内のデータを作成したり、追加したい場合は、私はこのエラーを取得:INSERT文... Entity Frameworkので

System.Data.SqlClient.SqlException:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.CompanyProfiles_dbo.Users_Id". The conflict occurred in database "AppDb", table "dbo.Users", column 'Id'. The statement has been terminated.

私は1対1の関係を持っていますUserCompanyProfileの間です。

User.cs

public class User : IdentityUser<Guid, UserLogin, UserRole, UserClaim> 
{ 
    ... 
    // navigation properties 
    public virtual CompanyProfile CompanyProfile { get; set; } 
} 

CompanyProfile.cs

public class CompanyProfile 
{ 
    ... 
    // navigation property 
    public User User { get; set; } 
    public Guid UserId { get; set; } 
} 

CompanyProfileConfig.cs

​​

また、私は、SQL Serverプロファイラでこのクエリを取得:

INSERT[dbo].[CompanyProfiles] ([Id], [CompanyName], [Activity],[Description], 
           [WebSite], [Phone], [UserId], [Address]) 
VALUES('aee90a37-425a-4a2c-a3df-2c2c95ad954c' /* @0 - [Id] */, 
     'My Company' /* @1 - [CompanyName] */, 
     'Programmer' /* @2 - [Activity] */, 
     'MyDescription' /* @3 - [Description] */, 
     'http://example.com' /* @4 - [WebSite] */, 
     '66663369' /* @5 - [Phone] */, 
     '2f4e0f48-b7e3-4bfb-98fe-69daa1cb501a' /* @6 - [UserId] */, 
     'MyAddress' /* @7 - [Address] */) 

私のポストのActionResult:

public virtual async Task<ActionResult> CreateProfile(CompanyProfileViewModel viewModel) 
    { 
     viewModel.UserId = new Guid(_identity.GetUserId()); 

     if (ModelState.IsValid) 
     { 
      _companyProfileService.Create(viewModel); 
      await _uow.SaveAllChangesAsync(); 
     } 

     return View(MVC.Company.Profile.ActionNames.CreateProfile,viewModel); 
    } 

CompanyProfileテーブルのスクリーンショット:

enter image description here

+0

viewModel.UserId = new Guid(_identity.GetUserId())を変更することができますと仮定しますか?あなたが既に存在していても、新しいユーザーを追加しようとしているか、リンクしているユーザーが存在しない可能性があります。 –

+0

@federicoscamuzzi –

+0

ええ、これはあなたの問題を示しています..あなたはuserIDのための新しいGUIDを生成することはできません...あなたはそうしていますか? –

答えて

1

ここには1:0..1の関連付けがあります(User:CompanyProfile)。 EFは、従属エンティティ(CompanyProfile)の主キーをプリンシパルエンティティの外部キーとして使用してこれを実装します。したがって、両方のレコードはデータベース内で同じPKを持ちます。あなたのケースでは

は、あなたのサービスの方法を検討することができない、私はあなたがCompanyProfileからUserIdを削除し、あなたがそれを追加しようとしているコードを投稿することができ

viewModel.Id = new Guid(_identity.GetUserId()); 
+0

すばらしい答えありがとう –

1

私はあなたの問題はあなたが作成していると思い新しいGUID .. EFが間違っています...これで試してみるとどうなりますか:

public virtual async Task<ActionResult> CreateProfile(CompanyProfileViewModel viewModel) 
     { 
      viewModel.UserId = _identity.GetUserId(); 
      if (ModelState.IsValid) 
      { 



    _companyProfileService.Create(viewModel); 
      await _uow.SaveAllChangesAsync(); 
     } 

     return View(MVC.Company.Profile.ActionNames.CreateProfile,viewModel); 

    } 

または、正しいユーザーを検索しようとするとDBからリンクしますか?

+0

Guid.parse(_identity.GetUserId());を使用します。しかし固定されていない –

関連する問題