2013-03-26 2 views
1

Исключение DbUpdateException в db.SaveChanges() в моем UploadReferencePhoto ActionResult при попытке загрузить фотографию в базу данных SQL через мое приложение. Сначала я использую код с наследованием на основе таблицы. Модели, связанные со сценарием являются следующие:DbUpdateException (инструкция вставки противоречит ограничениям внешнего ключа) при добавлении изображения (массив байтов) в базу данных

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; } 
} 

ReferencePhoto:

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

So Tenant распространяется UserProfile и ReferencePhoto распространяется Image. Когда я нажимаю кнопку, вызывается вышеупомянутое исключение. Внутреннее исключение состоит в следующем:

"Заявление ВСТАВИТЬ конфликтные с ограничением FOREIGN KEY \" FK_dbo.ReferencePhoto_dbo.Tenant_UserId \ "Конфликт произошел в базе данных \" C: \ Users \ HOME \ DESKTOP \ LETLORD \ LETLORD \ App_Data \ LETLORD.MDF \ "таблица \ "dbo.Tenant \", столбец" UserId. \ г утверждение \ NThe было прервано."}

Может кто-нибудь сказать мне, что именно внутреннее исключение говорит и, возможно, как его разрешить? Сообщите мне, требуется ли больше кода/информации.

ответ

1

Попробуйте посмотреть здесь:

INSERT statement conflicted with the FOREIGN KEY constraint

«То, как FK работает, он не может иметь значение в этом столбце, также не в столбец первичного ключа из указанной таблицы.»

Если вы добавляете запись в таблицу с помощью FK, вам необходимо убедиться, что запись, содержащая первичный ключ, также есть.

+0

Спасибо, проблема решена установкой FK 'reference.UserId = tenantRepository.GetLoggedInTenant(). UserId;'. По какой-то причине я не думал, что должен был непосредственно установить FK. – MattSull

+2

Я был бы рад за вас, но я вулкан и не способен показать человеческие эмоции. –

Смежные вопросы