gpt4 book ai didi

c# - Entity Framework 代码优先和 ironpython

转载 作者:太空狗 更新时间:2023-10-29 23:50:50 27 4
gpt4 key购买 nike

是否可以将 Entity Framework 6 与代码优先模式结合使用并使用 C# 和 IronPython 编写模型?

背景是,一些标准模型在 c# 核心中定义,一些自定义模型必须在 IronPython 中定义。

编辑

自定义模型是在我们用于自定义的生产系统中定义的。应在应用程序启动时加载模型并将其添加到 DbContext。每个模型都是一个 IronPython 文件/模块,将从数据库加载(就像所有其他脚本一样)。

无效样本

程序.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();
}
}
}

示例上下文.cs

namespace IronPython_EF
{
using System;
using System.Data.Entity;
using System.Linq;

public class SampleContext : DbContext
{


public SampleContext() : base("name=SampleContext")
{

}
}
}

用户.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)

演示.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 的一部分。

感谢您的帮助!

最佳答案

我不确定这是否可行,因为 IronPython 类不是 .NET 类。可以编写一个自定义映射器,而不是从 IronPython 文件为您生成类。但这可能会因关系/索引/键等而变得复杂。

如果您必须保留 IronPython,并且正在寻找 EF 的 ORM 优势,那么替代方案是:http://www.sqlalchemy.org/

但如果您正在寻找 EF 提供的其他优点(迁移等),那么这将是一个问题。

关于c# - Entity Framework 代码优先和 ironpython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com