- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否可以在每次传入连接字符串时使用 Entity Framework 动态创建整个模型(数据库优先)方法?
我尝试了以下方法:
MetaModel model = new MetaModel();
model.RegisterContext(() => new Model1(connectionString),
new ContextConfiguration()
{
ScaffoldAllTables = true
});
但它总是给我一个错误
An unhandled exception of type 'System.ArgumentException' occurred in System.Web.DynamicData.dll
Additional information: The context type 'DbContext.Model1' is not supported.
更多信息:
我在数据库中拥有我无法控制的所有必需表,如果我需要任何新表或旧表中的列,那么数据库人员会为我运行适当的脚本。
我正在尝试使用 EF
创建一个通用 DLL,我可以在各种应用程序 6 上使用它,包括 winforms
和 mvc
网络应用程序。我正在尝试找出解决此问题的最佳方法。
我可以将 codefirst
和 databasefirst
混合在一起吗?
codefirst
不会为我生成我已有的表吗?
我的每个应用程序都包含 1 个 winforms 和 1 个网络应用程序,它们共享数据源,例如
Test 1 Windows App & Test 1 MVC App = DB 1
Test 2 Windows App & Test 2 MVC App = DB 2
Test 3 Windows App & Test 3 MVC App = DB 3
所以我需要将 connectionstring
传递给 DBContext
。我的实体将如何工作?
如果需要更多信息,请告诉我。
最佳答案
技术上,您可以在运行时创建 Entity Framework 模型,至少通过动态创建程序集并使用代码首先工作的 api 和属性,或者通过创建模型所需的 xml。 但是您不需要在运行时创建模型类。
事实上,在运行时创建模型类是没有用的,因为您创建的模型在编译时和运行时都可以工作。你创建模型是因为你想传递 Type1
到方法或编写类似 .Where(x=>x.SomeFiled == SomeValue)
的类型查询.
如果您对不同的客户有不同的应用实例
如果您为不同的客户提供不同的应用程序实例,则无需执行任何特定操作。您的应用程序已准备就绪,只需在 webconfig
中使用不同的连接字符串即可和 appconfig
针对不同的客户。
如果您有一个适用于所有客户的应用程序实例
在这种情况下,您有一个 Multi-Tenancy 应用程序,您可以简单地向接受连接字符串作为输入的数据库上下文构造函数添加一个重载。然后,当您需要创建数据库上下文的实例时,您可以使用该重载并根据您的租户检测策略在连接字符串中注入(inject)合适的用户名、密码和数据库名称。
public partial class SampleDbEntities
{
public SampleDbEntities(string connectionString) : base(connectionString)
{
}
}
最好将新的重载放在分部类中。然后每次更新edmx
时都不会触及它和 .tt
上下文运行的模板。
例如,您可以这样创建连接字符串和上下文:
var connectionTemplate =
@"metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;" +
@"provider=System.Data.SqlClient;" +
@"provider connection string=""data source={0};" +
@"initial catalog={1};" +
@"persist security info=True;" +
@"user id={2};" +
@"password={3};" +
@"MultipleActiveResultSets=True;App=EntityFramework""";
string connection = string.Format(connectionTemplate,
@"(localdb)\v11.0", @"SampleDB1", @"user1" , @"password1");
var db = new SampleDbEntities(connection);
或者您可能需要 Windows 身份验证,然后使用 @"integrated security=True;" +
代替用户 ID 和密码.
您可以根据不同的策略检测不同的租户,包括:
您可以将创建合适上下文的角色赋予根据您的租户策略工作的类。
数据库表发生变化怎么办?
只需在设计时更新您的 edmx 模型并重建您的应用程序并重新分发它。如上所述,如果将一个文件添加到表中或将一个新表添加到数据库中,并且您想在应用程序中编写此类类型的查询 db.Tabe1.Where(x=>x.Field1==value1)
,那么您需要从数据库更新模型并重建您的应用程序。在运行时重新生成模型没有意义。
我怎样才能提高工作效率?
我知道您的目标是提高生产力,但在运行时生成模型并不是您想要的。相反,您可以创建一些通用数据访问层和通用业务逻辑层来提高生产力。例如,如果您有很多需要 CRUD 操作的实体,您可以创建一个 EntityBusiness<TContext, TModel>
类并具有通用 void Create(TModel entity)
, IList<TModel> GetAll(object key)
, TModel GetByKey(object key)
, TModel Update(TModel entity)
, void DeleteByKey(object key)
等。这样您就可以简单地创建一个 EntityBusiness<SampleDbEntities, Product>
的实例。或从中继承。该类包含简单 CRUD 操作的所有行为,您可以通过添加对验证等其他一些有用案例的支持来增强它。作为创建通用存储库和工作单元的示例,请查看此 article在 asp.net mvc 站点中。
关于c# - 即时创建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37945234/
我已经四处寻找我的问题的解决方案,但它们似乎都涉及看似复杂的方法,如数据透视表、交叉表等。似乎必须有一个更简单的解决方案来解决那些没有解决的问题在我看来是一个特别复杂的问题。我正在使用 MS SQL
我在共享服务器上安装了 MySQL,并且可以通过 phpMyAdmin 进行访问。我想将该数据库连续实时克隆到云 mySQL 数据库(我们专门为此数据库创建了一个支持 Nginx 的 MySQL 服务
我目前正在围绕一个相当复杂的数据模型编写一个 Django 应用程序。对于许多用例,我需要构建相似但略有不同的模板(包括 graphviz 等)。 现在我想知道是否有一种方法可以遵循 DRY 并“即时
我选择了图片并在提交表单之前进行了预览。但是我想在选择图像并预览并提交文件后即时编辑文件。 js代码: var img = null; var canvas1 = document.g
目前,我们的网站存储 2/3 的固定图像尺寸。这些在上传时生成并通过我们的 CDN 分发。然而,我们需要实现更灵活的解决方案,我们正在开发需要多种不同尺寸的移动和平板电脑应用程序。我们建议的解决方案是
在 Google Wave 的介绍视频中,他们谈到了网络应用程序中的聊天问题。在许多 Web 应用程序中,您会看到如下消息: is typing.. (消息提交前) Google 想出了一个想法“在键
这个问题在这里已经有了答案: Formatting a number with leading zeros in PHP [duplicate] (11 个回答) 关闭3年前. PHP - 是否有一种
如何在VBA的“即时”窗口中打印二维数组?是否存在执行此操作的通用方法?一种在“即时”窗口中为每行绘制一排数组的方法可以解决此问题,因为唯一要做的就是为数组的每一行循环此代码。 最佳答案 我做了一个简
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给出一个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)动态(或称为即时)编译为通常更快的
我已经在我的 Windows 2003 服务器上安装了 VisualSVN,并将其配置为提供匿名读取访问。据我了解,VisualSVN 仅使用 apache 和下面的官方 SVN 存储库服务器。 现在
我正在开发一个使用 Twig 的 PHP 应用程序(但这并不重要)作为 View 层。这个 View 层有一个自定义扩展,允许我注册远程样式和脚本 Assets 以及样式和脚本内联 block 。系统
如今在许多网页上,您会经常看到带有指向目标的箭头的即时工具提示,类似于: https://www.w3schools.com/css/tryit.asp?filename=trycss_tooltip
我正在用 C++ 编写并在 Windows 中使用 OpenGL。 我创建了一个立方体,我希望它通过按“4”或“6”小键盘键围绕 y 轴旋转(使用 glRotate3f(),而不是 gluLookat
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给出一个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)动态(或称为即时)编译为通常更快的
这个问题在这里已经有了答案: 关闭 10 年前。
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)即时(或所谓的即时)编译成通常速度更快
与非 JIT 编译器相比,JIT 编译器具体做什么?谁能给个简洁易懂的描述? 最佳答案 JIT 编译器在程序启动后运行,并将代码(通常是字节码或某种 VM 指令)即时(或所谓的即时)编译成通常速度更快
我希望能够即时将音频文件转换为 MP3 以供用户浏览器使用。我正在使用的软件是:ubuntu 系统上的 Apache、PHP 和 FFMPEG。这是我到目前为止的代码: 使用此代码,仅转换音频的前几
我正在使用 IntervalObservable 连续调用我的应用程序的服务器端。我可以订阅和取消订阅 Oberservable,一切正常,但有一个异常(exception): 对服务器的第一次调用被
从服务器上的文件夹压缩(比如 2 个文件)并强制下载的最简单方法是什么?不将“zip”保存到服务器。 $zip = new ZipArchive(); //the string "fil
我是一名优秀的程序员,十分优秀!