Entity Framework复杂类型属性作为键

4

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

假设我有这样的数据库:

create table people ( id int, name nvarchar(128) )

我希望将以下C#类结构映射到这个表格中:

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

    class Person
    {
        public PersonId Id { get; set; }
        public string Name { get; set; }
    }

我该怎么做呢?

-Dmytro


简短回答:复杂类型属性中不允许使用键,且复杂类型本身也不是键。更好的回答:请参考 Ted 的解决方案。如果您想为所有实体类设置一组属性,可以使用具体类型表继承。或许您可以在提供无法运行的解决方案时,同时说明底层设计问题的具体情况。 - grek40
1个回答

0

如果你只有一个属性,那么单独拥有一个PersonId类的意义何在?这对我来说似乎是不好的实践。

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

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

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

4
我猜意图是使用强类型的ID来防止将苹果和橙子进行比较,即使它们在数据库中都用整数表示。 - Eugene D. Gubenkov
谢谢,尤金。这正是问题的要点。例如,Scala和Go允许为原始类型创建别名,并在传递标识符时进行编译时验证。这是一种额外的安全机制,可以避免与误用ID相关的错误。 - Dmytro Mykhailov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接