0

エンティティ フレームワーク コードの最初の使用方法がわからないという質問があります。今、私は2つのテーブルTbATbBを持っています

    create table TbA
(
    [id] int not null identity(1,1) constraint [PK_TbA] primary key,
    [name] varchar(50) not null
)

    create table TbB
(
    [id] int not null identity(1,1) constraint [PK_TbB] primary key,
    [name] varchar(50) not null,
    [TbAId] int not null
)

データベースでは、forgin キーを使用していません。

これは私のコードです。この一対一の関係のようにマッピングする方法がわかりません

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "data source=localhost;database=demo;Integrated Security=True";
        MyDbContext db = new MyDbContext(connectionString);
        db.TbA.AsParallel().ForAll(x => {
            Console.WriteLine("{0}----{1}", x.TbAId, x.TbAName);
        });

        //here is throw error
        db.TbB.AsParallel().ForAll(x => {
            Console.WriteLine("{0}--{1}--{2}--{3}", x.TbBId, x.TbBName, x.MyTbA.TbAId, x.MyTbA.TbAName);
        });
        Console.ReadLine();
    }
}

public class MyDbContext : DbContext
{
    public DbSet<TbA> TbA { get; set; }
    public DbSet<TbB> TbB { get; set; }

    public MyDbContext(string connectionString)
        : base(connectionString)
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new TbAMapping());
        modelBuilder.Configurations.Add(new TbBMapping());
        base.OnModelCreating(modelBuilder);
    }
}

public class TbA
{
    public int TbAId { get; set; }

    public string TbAName { get; set; }
}

public class TbB
{
    public int TbBId { get; set; }
    public string TbBName { get; set; }
    public TbA MyTbA { get; set; }
}

public class TbAMapping : EntityTypeConfiguration<TbA>
{
    public TbAMapping()
    {
        ToTable("TbA");
        HasKey(x => x.TbAId);
        Property(x => x.TbAId).IsRequired().HasColumnName("Id");
        Property(x => x.TbAName).IsRequired().HasColumnName("Name");
    }
}

public class TbBMapping : EntityTypeConfiguration<TbB>
{
    public TbBMapping()
    {
        ToTable("TbB");
        HasKey(x => x.TbBId);
        Property(x => x.TbBId).IsRequired().HasColumnName("Id");
        Property(x => x.TbBName).IsRequired().HasColumnName("Name");
        // here, how to setting the mapping  the TbA.Id to here
    }
}
4

1 に答える 1

0


まず、TbA MyTbA を仮想として宣言する必要があります。

public virtual TbA MyTbA{get;set;}
(*)public int TbAid{get;set;}

次に、typeConfiguration で関係を構成できます。
ただし、BクラスにはforeignKeytoAが必要です(*)。

HasRequired(x=>x.MyTbA).WithOptional().HasForeignKey(x=>x.ForeignKeytoA);

あなたが置くなら

.withOptional(empty).

これは、クラス A が B への外部キーを持っていないことをエンティティに伝えます。

于 2013-07-18T11:46:40.430 に答える