Я использую SqlServerCompact, платформу Entity с первым кодом и генерирую строку подключения динамически, потому что база данных создается при запросе пользователем.
Я следовал советам из этого вопроса: Как программно установить строку подключения для Entity-Framework Code-First? однако, у меня все еще есть проблемы, в результате я получаю исключение, сообщающее, что схема в модели отличается от используемой в коде.
Это, однако, очевидно, я хочу, чтобы схема генерировалась из кода, поэтому я действительно не могу понять, почему это происходит
Может ли кто-нибудь мне помочь? Вот код, используемый:
NerdDinners.cs
class NerdDinners : DbContext
{
public static string CreateConnectionString(string dbPath = @"|DataDirectory|\NerdDinners.sdf")
{
SqlCeConnectionStringBuilder sqlConnection = new SqlCeConnectionStringBuilder();
sqlConnection.Password = "9023fase93";
sqlConnection.DataSource = dbPath;
EntityConnectionStringBuilder connection = new EntityConnectionStringBuilder();
connection.Metadata = @"res://*/NerdDinnersModel.csdl|res://*/NerdDinnersModel.ssdl|res://*/NerdDinnersModel.msl";
connection.Provider = "System.Data.SqlServerCe.3.5";
connection.ProviderConnectionString = sqlConnection.ToString();
return connection.ToString();
}
public NerdDinners() : base() { }
public NerdDinners(string nameOrConnectionString) : base(nameOrConnectionString) { }
public DbSet<Dinner> Dinners { get; set; }
public DbSet<RSVP> RSVPs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<NerdDinners>(new NerdDinnersInitializer());
Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe");
base.OnModelCreating(modelBuilder);
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
NerdDinners nerdDinner = new NerdDinners(NerdDinners.CreateConnectionString());
Console.WriteLine("Inizio test");
var res = from d in nerdDinner.Dinners
select d;
Console.WriteLine("Dinners:");
foreach (var item in res)
Console.WriteLine(item.ToString());
Console.WriteLine("End");
// Usato per terminazione
Console.ReadKey();
}
}
Это мое решение ситуации (изображение):
![Solution rapresentation](https://i.stack.imgur.com/11tCs.png)
РЕДАКТИРОВАТЬ 1:
Ошибка - MetadataException, он жалуется на недопустимую схему
РЕДАКТИРОВАТЬ 2:
NerdDinnersInitializer.cs
class NerdDinnersInitializer : DropCreateDatabaseAlways<NerdDinners>
{
public NerdDinnersInitializer() : base() { }
protected override void Seed(NerdDinners context)
{
var toadd = new List<Dinner>
{
new Dinner
{
Address = "bla",
DinnerID = 0,
EventDate = DateTime.Parse("2010-12-03"),
HostedBy = "mclink",
Title = "Notitle",
},
new Dinner
{
Address = "Fiwe",
DinnerID = 0,
EventDate = DateTime.Parse("2011-12-03"),
HostedBy = "ngi",
Title = "Bah",
},
};
toadd.ForEach(item => context.Dinners.Add(item));
context.SaveChanges();
base.Seed(context);
}
}