1

アプリケーションを介してSQLデータベースに写真をアップロードしようとするとdb.SaveChanges()、DbUpdateExceptionがスローされます。UploadReferencePhoto ActionResult私は最初にタイプごとのテーブル継承でコードを使用しています。シナリオに関連するモデルは次のとおりです。

UserProfile:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    // ...
}

テナント:

[Table("Tenant")]
public class Tenant : UserProfile
{
    public Tenant()
    {
        this.ReferencePhotos = new List<ReferencePhoto>();
    }

    public virtual ICollection<ReferencePhoto> ReferencePhotos { get; set; }
}

画像:

[Table("Image")]
public class Image
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ImageId { get; set; }
}

参考写真:

[Table("ReferencePhoto")]
public class ReferencePhoto : Image
{
    // 1:many with Tenant
    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual Tenant Tenant { get; set; }
}

したがって、 TenantextendsUserProfileおよびReferencePhotoextends Image。[アップロード]をクリックすると、前述の例外がスローされます。内部例外は次のとおりです。

"INSERTステートメントがFOREIGNKEY制約\"FK_dbo.ReferencePhoto_dbo.Tenant_UserId\"と競合しました。競合はデータベース\"C:\ USERS \ HOME \ DESKTOP \ LETLORD \ LETLORD \ APP_DATA \ LETLORD.MDF \ "、テーブル\で発生しました"dbo.Tenant \"、列'UserId'。\r\nステートメントは終了しました。"}

誰かが、内部の例外が正確に何を言っているのか、そしておそらくそれを解決する方法を教えてもらえますか?さらにコード/情報が必要な場合はお知らせください。

4

1 に答える 1

1

ここを見てみてください:

INSERTステートメントがFOREIGNKEY制約と競合しています

「FKが機能する方法は、参照されるテーブルの主キー列にもない値をその列に含めることはできないということです。」

FKを使用してテーブルにレコードを追加する場合は、主キーを含むレコードもそこにあることを確認する必要があります。

于 2013-03-26T12:40:07.500 に答える