对于实体框架,我是新手。我通常使用ado.net,因为它比任何ORM都快,并且可以轻松生成重复代码。
现在我已经决定再次使用EF6并获得EF的一些经验
情景。
需要为许多客户迁移数据。(30个数据库)
基本上我们决定不管客户表是什么,它们都必须共享相同的视图。 因此,当我们阅读我们不关心的数据时,因为视图columnNames对于它们都是相同的。
Ado.net实施
非常简单。我的dal我有“GetCustomers”,“GetAccounts”等方法......我需要做的就是更改connectionString 我可以从任何数据库中读取视图。不要比这简单。
EF实施
如果我错了,请纠正我。 为了使EF能够工作,我必须为30个数据库(databaseFirst)生成代码。
有没有办法可以只使用连接字符串连接到正确的数据库,并根据连接字符串从视图中读取数据?
如何通过更改连接字符串使用EF6来完成它?
你能举出一个如何做到这一点的例子吗?
任何建议
答案 0 :(得分:0)
这里只是10分钟......(EF 5 on .net 4.5)
using System;
using System.Linq;
using System.Data.Entity;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Data.Objects.SqlClient;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Data.SqlClient;
namespace testef {
public class EntityZ {
public Int32 Id { get; set; }
public String P1 { get; set; }
}
public class EntityZConfiguration : EntityTypeConfiguration<EntityZ> {
public EntityZConfiguration()
: base() {
ToTable("v", "dbo"); // the view
HasKey(x => x.Id); //required
//the mapping of properties
Property(x => x.Id).HasColumnName("id");
Property(x => x.P1).HasColumnName("value");
}
}
public class TestEFContext : DbContext {
public DbSet<EntityZ> Entities { get; set; }
public TestEFContext(String cs)
: base(cs) {
//Database.SetInitializer<TestEFContext>(new DropCreateDatabaseAlways<TestEFContext>());
Database.SetInitializer<TestEFContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new EntityZConfiguration());
}
}
class Program {
static void Main(string[] args) {
//creating the db
using (SqlConnection conn = new SqlConnection("Data Source=ALIASTVALK;Initial Catalog=master;Integrated Security=True; MultipleActiveResultSets=True")) {
conn.Open();
using (SqlCommand com = conn.CreateCommand()) {
com.CommandText = "declare @v int = 0 select @v = 1 from sys.databases where name = 'TestEF' if @v = 1 drop database TestEF";
com.ExecuteNonQuery();
com.CommandText = "create database TestEF";
com.ExecuteNonQuery();
com.CommandText = "use TestEF";
com.ExecuteNonQuery();
com.CommandText = "create table t (i int not null, t nvarchar(max))";
com.ExecuteNonQuery();
com.CommandText = "insert into t (i, t) values (1, 'hello world')";
com.ExecuteNonQuery();
com.CommandText = "create view v as select i as id, t as value from t";
com.ExecuteNonQuery();
}
}
String cs = @"Data Source=ALIASTVALK;Initial Catalog=TestEF;Integrated Security=True; MultipleActiveResultSets=True";
using (TestEFContext ctx = new TestEFContext(cs)) {
foreach (EntityZ z in ctx.Entities) {
Console.WriteLine("{0}: {1}", z.Id, z.P1);
}
}
}
}
}