2

DataAnnotations 与 Fluent API 方法做同样的事情吗?

例如,.HasRequired == [Required] 吗?

.HasKey == [密钥]?

如果我不希望我的表 pk 字段生成为 ClassNameClassNameID 如果我对我的 pk 属性使用 ClassNameID 格式,我必须用 [Key] 标记类键或使用 .HasKey 吗?

我可以使用 DataAnnotations 和 Fluent API 的组合吗?或者,是一个还是另一个?

我必须为所涉及的两个类映射 M:M 关系,即

public class Foo
{
    public ICollection<Bar> Bars
}

public class Bar
{
    public ICollection<Bar> Foos
}

public class Context : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Foo>()
            .HasMany(f => f.Bars).WithMany(b => b.Foos)
            .Map(t =>
                {
                    t.MapLeftKey("FooID");
                    t.MapRightKey("BarId");
                    t.ToTable("FooBar");
                });

         modelBuilder.Entity<Bar>()
            .HasMany(b => b.Foos).WithMany(f => f.Bars)
            .Map(t =>
                {
                    t.MapLeftKey("FooID");
                    t.MapRightKey("BarId");
                    t.ToTable("FooBar");
                });
}

谢谢。

4

1 回答 1

3

我可以使用 DataAnnotations 和 Fluent API 的组合吗?或者,是一个还是另一个?

是的,您可以使用组合。但是,通常最好选择其中一个。我更喜欢 fluent,因为它将某些持久性问题排除在实体类之外。

DataAnnotations 与 Fluent API 方法做同样的事情吗?

例如,.HasRequired == [Required] 吗?

.HasKey == [密钥]?

是的。此外,.IsRequired == [必需]

我必须为所涉及的两个类映射 M:M 关系吗

不,您只需要映射关系的一侧。您可以映射双方,但如果更改关系,则需要修改两组代码。此外,当您映射双方时,两个映射必须解析为相同的结果(即数据库中的相同外键声明)。

如果我不希望我的表 pk 字段生成为 ClassNameClassNameID 如果我对我的 pk 属性使用 ClassNameID 格式,我必须用 [Key] 标记类键或使用 .HasKey 吗?

是的,除非您的属性名称是 Id 或 PersonId/ProductId/OrderId/WhateverEntityNameId。按照惯例,EF 会猜测这些是您的关键属性。但是,通过在模型构建器上调用 .HasKey 来明确这一点永远不会有什么坏处。

于 2012-07-13T19:39:11.893 回答