0

モデル:

public class User
{
    public int Id {get; set;}
    public int SomeProperty {get; set;}
    public virtual Group Group { get; set; }
}

public class Group {
{
    public int Id {get; set;}
    // other properties
}

この linq クエリを実行します。

myContext.Users.Where(u => u.SomeProperty = 4);

次の sql クエリが生成されます。

select
    extent1.Id as Id
    extent1.SomeProperty as SomeProperty
    extent1.Group_Id as Group_Id
from
    dbo.Users as extent1

他のプロパティで行ったように、関連列をキャメルケースにしないことにしたのは奇妙です。これには何らかの理由がありますか?

いずれにせよ、マッピング コードを追加して修正を試みました。

var entity = modelBuilder.Entity<User>();
entity.HasRequired( a => a.Group )
    .WithRequiredDependent()
    .Map( a => a.MapKey( "GroupId" ) );

残念ながら、linq でクエリを実行すると、次のクエリが生成されます。

select
    extent1.Id as Id
    extent1.SomeProperty as SomeProperty
    extent1.GroupId as GroupId
    extent1.Group_Id as Group_Id
from
    dbo.Users as extent1

見た目は少し良くなりましたが、テーブルには Group_Id ではなく GroupId という列があるため、明らかにまだ機能していません。ここで何が起こっているのか、またはそれを修正する方法を知っている人はいますか?

4

2 に答える 2

1

マッピングUser-Groupは n - 1 であるため、マッピングは次のようになります。

var entity = modelBuilder.Entity<User>();
entity.HasRequired(a => a.Group)          // user has one Group
      .WithMany()                         // Group has many Users
      .Map( a => a.MapKey("GroupId"));

EF はGroup_Id、クラス モデルから推論した 1-n アソシエーションの列自体を作成しGroupIdましたが、自分でマップした 1:1 アソシエーションのために追加されました。

于 2013-07-24T20:41:17.087 に答える