CTP5 与 4.1 版 EF 多对多关系

发布于 2024-11-30 22:57:13 字数 1275 浏览 5 评论 0原文

这段代码不起作用。怎么了? OnModelCreating 不会影响任何结果?因为我在数据库中看不到“ProductCategories”表。

    public class GoldContext : DbContext
    {
        public virtual DbSet<Prouct> Products { get; set; }
        public virtual DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //HACK:4.1 modelBuilder.Conventions.Add(new DecimalPrecisionAttributeConvention());
        modelBuilder.Entity<Product>()
            .HasMany<Category>(m => m.Categories)
            .WithMany().Map(m => 
                m.MapLeftKey("ProductId")
                .MapRightKey("CategoryId")
                .ToTable("ProductCategories"));
        base.OnModelCreating(modelBuilder);
    }
}

//product and category classes look like this.

    public class Product
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
    }

    public class Category
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Product> Products { get; set; }
    }

提前致谢。

This code doesn't work. What is wrong? OnModelCreating doesnt't effect any result? Because I can not see "ProductCategories" table in my Database.

    public class GoldContext : DbContext
    {
        public virtual DbSet<Prouct> Products { get; set; }
        public virtual DbSet<Category> Categories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //HACK:4.1 modelBuilder.Conventions.Add(new DecimalPrecisionAttributeConvention());
        modelBuilder.Entity<Product>()
            .HasMany<Category>(m => m.Categories)
            .WithMany().Map(m => 
                m.MapLeftKey("ProductId")
                .MapRightKey("CategoryId")
                .ToTable("ProductCategories"));
        base.OnModelCreating(modelBuilder);
    }
}

//product and category classes look like this.

    public class Product
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
    }

    public class Category
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Product> Products { get; set; }
    }

Thanks in advance.

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

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

发布评论

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

评论(1

断桥再见 2024-12-07 22:57:13

这是我在控制台应用程序中尝试过的并且按预期工作:

namespace Q7122388
{
    #region Imports

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity;
    using System.Linq;

    #endregion

    public class Product
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
    }

    public class Category
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Product> Products { get; set; }
    }

    public class DatabaseContext : DbContext
    {
        public virtual DbSet<Product> Products { get; set; }
        public virtual DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>()
                .HasMany<Category>(m => m.Categories)
                .WithMany().Map(m =>
                    m.MapLeftKey("ProductId")
                    .MapRightKey("CategoryId")
                    .ToTable("ProductCategories"));
            base.OnModelCreating(modelBuilder);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>());
            using (var context = new DatabaseContext())
                context.Database.Initialize(true);
        }
    }
}

This is what I've tried in a console application and works as expected :

namespace Q7122388
{
    #region Imports

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity;
    using System.Linq;

    #endregion

    public class Product
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
    }

    public class Category
    {
        [Key]
        public int Id { get; set; }

        public virtual string Name { get; set; }

        public virtual ICollection<Product> Products { get; set; }
    }

    public class DatabaseContext : DbContext
    {
        public virtual DbSet<Product> Products { get; set; }
        public virtual DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>()
                .HasMany<Category>(m => m.Categories)
                .WithMany().Map(m =>
                    m.MapLeftKey("ProductId")
                    .MapRightKey("CategoryId")
                    .ToTable("ProductCategories"));
            base.OnModelCreating(modelBuilder);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>());
            using (var context = new DatabaseContext())
                context.Database.Initialize(true);
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文