实体框架代码优先:共享主键

发布于 2024-11-05 08:33:19 字数 103 浏览 0 评论 0原文

我有一个现有的表,其主键超过 3 列(1 个 varchar 和 2 个整数)。 我如何告诉实体框架使用这个“密钥”。 是否可以使用模型构建器、属性或者还有其他方法吗?

谢谢!

i have a existing table with a primary key over 3 columns (1 varchar and 2 integer).
How can i tell the entity framework to use this "key".
Is it possible using the modelBuilder, attributes or is there another way ?

thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

佞臣 2024-11-12 08:33:19

在 Fluent api 中,您必须使用匿名类型:

modelBuilder.Entity<YourType>()
            .HasKey(e => new 
                {
                    e.VarChar,
                    e.Int1,
                    e.Int2
                });

其他方法是使用数据注释:

public class YourType
{
    [Key, Column(Order = 0)]
    public string VarChar { get; set; }
    [Key, Column(Order = 1)]
    public int Int1 { get; set; }
    [Key, Column(Order = 2)]
    public int Int2 { get; set; }
}

在这两种情况下,列的顺序都很重要。一旦您尝试使用DbSet.Find,您将必须以相同的顺序提供密钥。 EF 也在内部使用顺序。

In fluent api you must use anonymous type:

modelBuilder.Entity<YourType>()
            .HasKey(e => new 
                {
                    e.VarChar,
                    e.Int1,
                    e.Int2
                });

Other way is using data annotations:

public class YourType
{
    [Key, Column(Order = 0)]
    public string VarChar { get; set; }
    [Key, Column(Order = 1)]
    public int Int1 { get; set; }
    [Key, Column(Order = 2)]
    public int Int2 { get; set; }
}

In both scenarios order of columns is important. Once you try to use DbSet<YourType>.Find you will have to supply keys in the same order. EF also uses order internally.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文