Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity FreamWork создает свою связующую таблицу вместе с моей моделью / 9 сообщений из 9, страница 1 из 1
14.01.2018, 18:22
    #39583992
Sergey364
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Доброго времени суток

Имею следующие модели:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
    public class Order
    {
        public DateTime OrderDate { get; set; }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public decimal? Cost { get; set; }
        public string Statement { get; set; }
        public bool IsPaid { get; set; }
        public Nullable<DateTime> DatePayment { get; set; } 

        public virtual ICollection<Product> Products { get; set; }
        public ApplicationUser User { get; set; }
}
public class Product
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }
        public string Description { get; set; }

        public virtual ICollection<Order> Orders { get; set; }
    }

        [Key]
        [Column(Order = 1)]
        
        public int Product_Id { get; set; }
        [Key]
        [Column(Order = 2)]
        
        public int Order_Id { get; set; }
        public int Count { get; set; }

        [ForeignKey("Product_Id")]
        public Product Product { get; set; }

        [ForeignKey("Order_Id")]
        public Order Order { get; set; }
}



Проблема в том, что когда создаю первую миграцию, то EF предлагает мне создать 2 связующие таблицы:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 CreateTable(
                "dbo.OrderProducts",
                c => new
                    {
                        Product_Id = c.Int(nullable: false),
                        Order_Id = c.Int(nullable: false),
                        Count = c.Int(nullable: false),
                    })
                .PrimaryKey(t => new { t.Product_Id, t.Order_Id })
                .ForeignKey("dbo.Orders", t => t.Order_Id, cascadeDelete: true)
                .ForeignKey("dbo.Products", t => t.Product_Id, cascadeDelete: true)
                .Index(t => t.Product_Id)
                .Index(t => t.Order_Id);

CreateTable(
                "dbo.ProductOrders",
                c => new
                    {
                        Product_Id = c.Int(nullable: false),
                        Order_Id = c.Int(nullable: false),
                    })
                .PrimaryKey(t => new { t.Product_Id, t.Order_Id })
                .ForeignKey("dbo.Products", t => t.Product_Id, cascadeDelete: true)
                .ForeignKey("dbo.Orders", t => t.Order_Id, cascadeDelete: true)
                .Index(t => t.Product_Id)
                .Index(t => t.Order_Id);



Пробовал и через Fluent Api сделать связи, и через аннотации, результат один.
Что я делаю не так? Помогите пожалуйста найти ошибку
...
Рейтинг: 0 / 0
14.01.2018, 18:57
    #39583998
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Код: c#
1.
2.
[InverseProperty(nameof(Product.Orders))]
public virtual ICollection<Product> Products { get; set; }
...
Рейтинг: 0 / 0
14.01.2018, 18:58
    #39583999
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Sergey364
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[Key]
        [Column(Order = 1)]
        
        public int Product_Id { get; set; }
        [Key]
        [Column(Order = 2)]
        
        public int Order_Id { get; set; }
        public int Count { get; set; }

        [ForeignKey("Product_Id")]
        public Product Product { get; set; }

        [ForeignKey("Order_Id")]
        public Order Order { get; set; }



эт чё такое? модель связи? в общем непонятно, либо вы код неправильно скопировали, либо хз
...
Рейтинг: 0 / 0
14.01.2018, 19:02
    #39584000
Sergey364
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
hVostt,

Да, это модель связи, я скопировал криво, потом не увидел кнопку редактирования и осталось так(
...
Рейтинг: 0 / 0
14.01.2018, 19:21
    #39584004
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Sergey364,

Слово Много ко Многим слышали?
...
Рейтинг: 0 / 0
14.01.2018, 19:24
    #39584005
Sergey364
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Petro123,
Конечно. Но разве в связующей таблице еще свойств быть не может?
...
Рейтинг: 0 / 0
14.01.2018, 19:30
    #39584009
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Sergey364Petro123,
Конечно. Но разве в связующей таблице еще свойств быть не может?
если в базе 2 таблы Одни ко Многим, то в табле чилдрен никак массива от мастера таблицы не может быть.
Приведите ddl таблиц в базе и уберите лишние поля.
...
Рейтинг: 0 / 0
14.01.2018, 19:50
    #39584014
Sergey364
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Petro123Sergey364Petro123,
Конечно. Но разве в связующей таблице еще свойств быть не может?
если в базе 2 таблы Одни ко Многим, то в табле чилдрен никак массива от мастера таблицы не может быть.
Приведите ddl таблиц в базе и уберите лишние поля.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE `Users` (
	`UserId` INT NOT NULL AUTO_INCREMENT,
	`Order_id` INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`UserId`,`Order_id`)
);

CREATE TABLE `Products` (
	`ProductId` INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`ProductId`)
);

CREATE TABLE `Orders` (
	`OrderId` INT NOT NULL AUTO_INCREMENT,
	`OrderId` INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`OrderId`)
);

CREATE TABLE `OrderProducts` (
	`ProductId` INT NOT NULL AUTO_INCREMENT,
	`OrderId` INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY (`ProductId`,`OrderId`)
);

ALTER TABLE `Orders` ADD CONSTRAINT `Orders_fk0` FOREIGN KEY (`OrderId`) REFERENCES `Users`(`Order_id`);

ALTER TABLE `OrderProducts` ADD CONSTRAINT `OrderProducts_fk0` FOREIGN KEY (`ProductId`) REFERENCES `Products`(`ProductId`);

ALTER TABLE `OrderProducts` ADD CONSTRAINT `OrderProducts_fk1` FOREIGN KEY (`OrderId`) REFERENCES `Orders`(`OrderId`);



Как-то вот так, если без лишних полей. Суть в чем:
Мне необходимо хранить количество заказанных, например, ручек. Для этого я и хочу создать поле Count в связующей таблице, которое будет говорить о
Order_id - какой заказ
Product_id - какой товар
Count - количество этого товара.
...
Рейтинг: 0 / 0
14.01.2018, 22:26
    #39584041
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Sergey364Как-то вот так, если без лишних полей.
теперь смотрим сюда:
http://www.databaseanswers.org/data_models/customers_and_orders/index.htm
т.е. почему у тебя заказ в табличке справочнике Юзвери?
А если несколько заказов у одного?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity FreamWork создает свою связующую таблицу вместе с моей моделью / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]