Вы знаете, что нет проблем с вашими моделями, и связь между ними правильная, но вы сказали в комментарии, что нет созданных БД и таблиц, верно?если да, то вы должны узнать о миграции из Здесь
в любом случае, если вы хотите знать, что script
будет создано вашей моделью, попробуйте выполнить код миграции ниже:
public class Configuration<T> : DbMigrationsConfiguration<T> where T : DbContext
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
public class DbMigrations
{
public static void UpdateDatabaseSchema<T>(string SQLScriptPath = "C:\\script.sql") where T : DbContext
{
var configuration = new Configuration<T>();
var dbMigrator = new DbMigrator(configuration);
SaveToFile(SQLScriptPath, dbMigrator);
dbMigrator.Update();
}
private static void SaveToFile(string SQLScriptPath, DbMigrator dbMigrator)
{
if (string.IsNullOrWhiteSpace(SQLScriptPath)) return;
var scriptor = new MigratorScriptingDecorator(dbMigrator);
var script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null);
File.WriteAllText(SQLScriptPath, script);
Console.WriteLine(script);
}
}
, выполнив эту миграцию в application start
, например:
static void Main(string[] args)
{
DbMigrations.UpdateDatabaseSchema<Models>();
}
, вы увидите, что сгенерированный метод script
in SaveToFile
, расположенный в C:\\script.sql
, выглядит следующим образом:
CREATE TABLE [dbo].[Actors] (
[ActorId] [int] NOT NULL IDENTITY,
[First_Name] [nvarchar](max),
[Last_Name] [nvarchar](max),
[Date_Of_Birth] [datetime] NOT NULL,
CONSTRAINT [PK_dbo.Actors] PRIMARY KEY ([ActorId])
)
CREATE TABLE [dbo].[Plays] (
[PlayID] [int] NOT NULL IDENTITY,
[ActorID] [int] NOT NULL,
[MovieID] [int] NOT NULL,
[Pay] [int] NOT NULL,
CONSTRAINT [PK_dbo.Plays] PRIMARY KEY ([PlayID])
)
CREATE TABLE [dbo].[Movies] (
[MovieId] [int] NOT NULL IDENTITY,
[Name] [nvarchar](max),
[publishDate] [datetime] NOT NULL,
CONSTRAINT [PK_dbo.Movies] PRIMARY KEY ([MovieId])
)
CREATE INDEX [IX_ActorID] ON [dbo].[Plays]([ActorID])
CREATE INDEX [IX_MovieID] ON [dbo].[Plays]([MovieID])
ALTER TABLE [dbo].[Plays] ADD CONSTRAINT [FK_dbo.Plays_dbo.Actors_ActorID] FOREIGN KEY ([ActorID]) REFERENCES [dbo].[Actors] ([ActorId]) ON DELETE CASCADE
ALTER TABLE [dbo].[Plays] ADD CONSTRAINT [FK_dbo.Plays_dbo.Movies_MovieID] FOREIGN KEY ([MovieID]) REFERENCES [dbo].[Movies] ([MovieId]) ON DELETE CASCADE
проблем нет, протестировав приведенный ниже код:
Models model = new Models();
var actor = new Actor
{
Date_Of_Birth = DateTime.Now,
First_Name = "first name",
Last_Name = "last name"
};
var movie = new Movie
{
publishDate = DateTime.Now,
Name = "movieN"
};
model.Movies.Add(movie);
model.SaveChanges();
//adding new relation
var foundAct = model.Actors.SingleOrDefault(x => x.ActorId == 1);
foundAct.Plays.Add(new Play
{
ActorID = foundAct.ActorId,
MovieID = 2// MovieId from Db
});
model.SaveChanges();
Убедитесь, что ваши миграции работают и таблицы находятся в БД, или выполните этот скрипт в вашей базе данных, если вы не хотите выполнять миграцию.