Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在没有主键的表上插入操作_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 在没有主键的表上插入操作

C# 在没有主键的表上插入操作,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,你好,我在数据库中有一个表,它只包含外键。此表结构如下所示: 代码首先由数据库中的VS生成: public partial class DeviceUsage { public int StorageId { get; set; } public int UserId { get; set; } public int DeviceInstanceId { get; set; } public virtual DeviceInstance DeviceIn

你好,我在数据库中有一个表,它只包含外键。此表结构如下所示:

代码首先由数据库中的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不喜欢没有主键的表


但是,即使我需要问您是否有任何可能使其工作,或者我被迫向表中添加新的列Id?

您必须设置主键。您不需要添加额外的
Id
列,您可以使用
[key]
属性将其中一个属性设置为主键。例如:

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

您必须设置主键。您不需要添加额外的
Id
列,您可以使用
[key]
属性将其中一个属性设置为主键。例如:

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

您必须设置主键。您不需要添加额外的
Id
列,您可以使用
[key]
属性将其中一个属性设置为主键。例如:

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

您必须设置主键。您不需要添加额外的
Id
列,您可以使用
[key]
属性将其中一个属性设置为主键。例如:

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

我认为没有主键插入是不可能的。 加上


顺其自然,你不必使用这个PK,我认为没有主键插入是不可能的。 加上


顺其自然,你不必使用这个PK,我认为没有主键插入是不可能的。 加上


顺其自然,你不必使用这个PK,我认为没有主键插入是不可能的。 加上


顺其自然,你不必使用这个PK,看看这篇文章,你的答案似乎是

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

看看这篇文章,你的答案似乎是

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

看看这篇文章,你的答案似乎是

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

看看这篇文章,你的答案似乎是

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


主键也可以是已经存在的列的连接(当然,如果三个值一起是唯一的),所有三个FK都是其列中的主键(具有标识)因此,它们是唯一的。难道你不能将这些值中的三个值作为你在表中的主键,然后使用它们吗?主键也可以是已经存在的列的连接(当然,如果三个值一起是唯一的),所有三个FK都是它们列中的主键(具有标识)因此,它们是唯一的。难道你不能将这些值中的三个值作为你在表中的主键,然后使用它们吗?主键也可以是已经存在的列的连接(当然,如果三个值一起是唯一的),所有三个FK都是它们列中的主键(具有标识)因此,它们是唯一的。难道你不能将这些值中的三个值作为你在表中的主键,然后使用它们吗?主键也可以是已经存在的列的连接(当然,如果三个值一起是唯一的),所有三个FK都是它们列中的主键(具有标识)所以它们是唯一的,难道你不能把这些值中的三个作为你在表上的主键,然后用它来完成吗?它是数据库优先模型,所以你不能在类代码中看到它,但所有的属性都是[必需的]我不确定,但是你可以尝试使用fluent api来定义主键:HasKey(d=>new{d.StorageId,d.UserId,d.DeviceInstanceId});它是数据库优先的模型,所以您无法在类代码中看到它,但所有属性都是[必需的]我不确定,但您可以尝试使用fluent api定义主键:HasKey(d=>new{d.StorageId,d.UserId,d.DeviceInstanceId});它是数据库优先的模型,所以您无法在类代码中看到它,但所有属性都是[必需的]我不确定,但您可以尝试使用fluent api定义主键:HasKey(d=>new{d.StorageId,d.UserId,d.DeviceInstanceId});它是数据库优先的模型,所以您无法在类代码中看到它,但所有属性都是[必需的]我不确定,但您可以尝试使用fluent api定义主键:HasKey(d=>new{d.StorageId,d.UserId,d.DeviceInstanceId});谢谢你的回答,但我忘了提到我使用数据库第一模型,所以我不应该使用数据注释Hanks作为答案,但我忘了提到我使用数据库第一模型,所以我不应该使用数据注释Hanks作为答案,但我忘了提到我使用数据库第一模型,所以我不应该使用数据注释感谢您的回答,但我忘了提到我使用数据库优先模型,所以我不应该使用数据注释