C# 实体框架复杂类型属性作为键

C# 实体框架复杂类型属性作为键,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,在实体框架中,是否有一种方法可以使用某些复杂类型作为实体的键并映射到现有数据库 假设我有这样的数据库: create table people ( id int, name nvarchar(128) ) [Key, Column(Order = 0)] public int column1 { get; set; } [Key, Column(Order = 1)] public int column2 { get; set; } 我想把下面的C#类结构映射到这个表中: clas

在实体框架中,是否有一种方法可以使用某些复杂类型作为实体的键并映射到现有数据库

假设我有这样的数据库:

create table people ( id int, name nvarchar(128) )
[Key, Column(Order = 0)]
public int column1 { get; set; }

[Key, Column(Order = 1)]
public int column2 { get; set; }
我想把下面的C#类结构映射到这个表中:

    class PersonId
    {
        public int Id { get; set; }
    }

    class Person
    {
        public PersonId Id { get; set; }
        public string Name { get; set; }
    }
我怎么能这么做


-Dmytro

如果您只有on属性,那么拥有一个单独的
PersonId
类有什么意义?对我来说,那似乎是一种坏习惯

也许您只需要一个复合键。要在EF中使用,您可以这样声明您的类:

create table people ( id int, name nvarchar(128) )
[Key, Column(Order = 0)]
public int column1 { get; set; }

[Key, Column(Order = 1)]
public int column2 { get; set; }

简短回答:复杂类型属性中不允许有键,并且复杂类型不是键。更好的答案是:看看下面的Ted,了解真正有效的东西。如果您想为所有实体类拥有一组属性,可以对每个具体类型的表使用继承。也许你可以在解决方案不起作用的情况下,更具体地说明你的潜在设计问题。我想这是为了防止将苹果和橙子进行比较,尽管两者在数据库中都是用整数表示的谢谢,Eugene。这正是问题的重点。例如,scala和go允许为基元类型创建别名,并允许对传递的标识符进行编译时验证。一个额外的安全机制,以避免错误使用的ID相关的错误。