Можно ли использовать Entity Framework 6 с первым шаблоном кода и написать модели на C# и в IronPython?Код Entity Framework first и ironpython
Фон состоит в том, что в ядре C# определено несколько стандартных моделей, а некоторые специальные модели должны быть определены в IronPython.
EDIT
Пользовательские модели были определены в наших производственных систем для настройки. Модели должны быть загружены и добавлены в DbContext
при запуске приложения. Каждая модель является одним файлом/модулем IronPython и будет загружаться из базы данных (как и все остальные скрипты).
Не рабочий образец
Program.cs
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IronPython_EF
{
class Program
{
// Private Member
private static SampleContext context;
static void Main(string[] args)
{
// Setup EntityFramework
context = new SampleContext();
// Create IronPython
var setup = Python.CreateRuntimeSetup(null);
var runtime = new ScriptRuntime(setup);
var engine = runtime.GetEngine("IronPython");
var scriptScope = engine.CreateScope();
// Set global var
scriptScope.SetVariable("DBContext", context);
// Load Model
ScriptSource modelSource = engine.CreateScriptSourceFromFile("Python\\User.py");
modelSource.Execute(scriptScope);
ScriptSource scriptSource = engine.CreateScriptSourceFromFile("Python\\Demo.py");
scriptSource.Execute(scriptScope);
// Prevent from exiting
Console.ReadLine();
}
}
}
SampleContext.cs
namespace IronPython_EF
{
using System;
using System.Data.Entity;
using System.Linq;
public class SampleContext : DbContext
{
public SampleContext() : base("name=SampleContext")
{
}
}
}
User.Py
# -----------------------------------------------
# Containing the UserModel
# -----------------------------------------------
# -----------------------------------------------
# Import
from System import Console
# -----------------------------------------------
#
class User(object):
userId = 0
userName = ""
def __init__(self):
pass
def get_userId(self):
return self.userId;
def set_userId(self, value):
self.userId = value
def get_userName(self):
return self.userName;
def set_userId(self, value):
self.userName = value
UserId = property(get_userId, set_userId)
UserName = property(get_userName, set_userId)
Demo.py
# -----------------------------------------------
# Demo Python Script, executing something in the
# Sample-DB-Context
# -----------------------------------------------
# -----------------------------------------------
# Import
from System import Console
# -----------------------------------------------
#
Console.WriteLine("Executing demo.py")
# Add User-Model
userSet = DBContext.Set[User]()
# Add User instance
usr = User()
usr.UserName = "Hallo Welt"
userSet.Add(usr)
# Save changes
DBContext.SaveChanges()
я получаю исключение, что User
не является частью DbContext.
Благодарим за помощь!
Можете добавить более подробную информацию о том, что вы пытаетесь сделать? Вы не сможете просто вывести DbContext на C# и добавить ваши модели IronPython в качестве DbSets (который является типичным примером первого кода), поскольку у вас нет скомпилированных типов, которые вы могли бы ссылаться. Может быть способ динамического создания модели из типов IronPython ... Как/когда будут определяться пользовательские модели и где объекты этого типа получаются с точки зрения приложения/архитектуры? –
@SimonOpelt, чем вы для своего повтора, я добавил еще несколько вопросов к вопросу. – BendEg
Врожденной проблемой с описанным подходом является информация о отсутствующем типе. Как бы модель python (предполагая, что она состоит из простых классов python и учитывая, что аннотации функций существуют только в 3) статически, без примерных экземпляров, содержащих фактические данные, отражающие, какие объекты/свойства существуют? –