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

Имею следующие модели:
Код: 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
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39583998
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
[InverseProperty(nameof(Product.Orders))]
public virtual ICollection<Product> Products { get; set; }
...
Рейтинг: 0 / 0
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39583999
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39584000
Sergey364
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

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

Слово Много ко Многим слышали?
...
Рейтинг: 0 / 0
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39584005
Sergey364
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Конечно. Но разве в связующей таблице еще свойств быть не может?
...
Рейтинг: 0 / 0
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39584009
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey364Petro123,
Конечно. Но разве в связующей таблице еще свойств быть не может?
если в базе 2 таблы Одни ко Многим, то в табле чилдрен никак массива от мастера таблицы не может быть.
Приведите ddl таблиц в базе и уберите лишние поля.
...
Рейтинг: 0 / 0
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39584014
Sergey364
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Entity FreamWork создает свою связующую таблицу вместе с моей моделью
    #39584041
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey364Как-то вот так, если без лишних полей.
теперь смотрим сюда:
http://www.databaseanswers.org/data_models/customers_and_orders/index.htm
т.е. почему у тебя заказ в табличке справочнике Юзвери?
А если несколько заказов у одного?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity FreamWork создает свою связующую таблицу вместе с моей моделью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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