2014-01-24 2 views
0

Здравствуйте, у меня есть таблица в базе данных, состоящая только из внешних ключей. Эта структура таблицы, как показано ниже:Вставить действие в таблицу без первичного ключа

код генерируется VS в базе данных первых:

public partial class DeviceUsage 
    { 
    public int StorageId { get; set; } 
    public int UserId { get; set; } 
    public int DeviceInstanceId { get; set; } 

    public virtual DeviceInstance DeviceInstance { get; set; } 
    public virtual Storage Storage { get; set; } 
    public virtual User User { get; set; } 
} 

Как Вы можете видеть все ключи иностранных из 3 других таблиц.

Я знаю, что EntityFramework не любит таблицы без первичных ключей.

Но даже я должен спросить вас, есть ли возможность заставить его работать, или я вынужден добавить новый идентификатор столбца к моей таблице?

+0

Первичные ключи могут быть также объединение уже существующих столбцов (если три значения вместе являются уникальными, конечно) – Steve

+0

Все три FK являются первичными ключами в их столбцах (с идентификатором), поэтому они уникальны. – szpic

+0

Не можете ли вы просто сделать трио этих значений ваш ПК на столе и покончить с ним? –

ответ

2

Вы должны установить свой основной ключ. Вам не нужно добавлять дополнительный столбец Id, вы можете установить одно из этих свойств в качестве первичного ключа с атрибутом [Key]. Например:

[Key] 
public int StorageId { get; set; } 
0

Я думаю, что вставка невозможна без первичного ключа. Просто добавьте

[Require] 
public int DeviceUsageId {get;set} 

и пусть это будет, вы не должны использовать этот ПК

+0

Это первая модель базы данных, поэтому вы не можете ее увидеть в коде класса, но все свойства [Обязательно] – szpic

+0

Я не уверен, но вы можете попробовать использовать свободный api для определения первичного ключа: HasKey (d => new { d.StorageId, d.UserId, d.DeviceInstanceId}); – Krahu

0

Глядя на эту статью о Entity Framework and Code First Data Annotations, кажется, что ваш ответ

public partial class DeviceUsage 
{ 
    [Key] 
    [Column(Order=1)] 
    public int StorageId { get; set; } 
    [Key] 
    [Column(Order=2)] 
    public int UserId { get; set; } 
    [Key] 
    [Column(Order=3)] 
    public int DeviceInstanceId { get; set; } 

    public virtual DeviceInstance DeviceInstance { get; set; } 
    public virtual Storage Storage { get; set; } 
    public virtual User User { get; set; } 
} 
+0

Спасибо за ответ, но я забыл упомянуть, что я использую первую модель базы данных, поэтому я не должен использовать аннотации данных – szpic

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