ADO.NET Entity Framework学习笔记(2)建模[转]

模型结构

 

[概念模型]中要有[实体键], [实体键]要与表中的 [主键] 对应,也就是说表必须要有主键.

表中的[唯一键]不会在[概念模型]中体现

在[概念模型]中默认是不允许修改[实体键]的值的

联合主健可以正常映射

如果为属性赋值超过字段长度保存时,会向数据库提交,数据库会返回错误

联合主健的主外关系可以正常映射

只有基于主健的主外关系可以在模型向导中自动建立

Conceptual Model

概念模型

用于描述实体(Entity)类型及其关系

Storage Model

存储模型

用于描述数据库实际存储架构

Mapping Specification

映射规范

将概念模型和存储模型连接起来,以便进行操作转换

Entity Class

实体类

用于描述实体的属性,每一个实体类都会定义一个属性或多个属性为一个键属性(Key Properties),用于唯一标识一个实体

实体类型可以通过继承关系加以扩展

Entity Set

实体集

实体(Entity)存在于实体集(Entity Set)中,就像表格中的行存在于表格中的一样

Entity Containe

实体容器,

实体集定义在实体容器(Entity Container)中

关联

关联

定义了实体之间的关系,可以直接通过关联,来访问相关联的对象,关联分为一对一、一对多、多对多

关联通过Association Type来定义,过实体类中的Navigation属性就可以访问与实体相关联的实体

 

模型关系说明

 

 

模型设计器结构说明

 

 

 

 

 

EDM

 

EF 没有采取 LINQ to SQL 基于Attribute映射的做法。

为了适应变化和提供更多的数据库类型扩展,EF 提供了专门的定义语言来完成模型设置

Conceptual schema definition language (.csdl)

 

Store schema definition language (.ssdl)

 

Mapping specification language (.msl)

 

 

默认,Model设计器将(.csdl)(.ssdl)(.msl)存放在一个名为(.edmx)的XML 格式定义文件,并会根据设计自动生成对应的Context与实体类

 

Model设计器

数据库中的表

模型

模型生成选项

 

 

edmx文件

 

<?xml version="1.0" encoding="utf-8"?>

<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">

<!-- EF Runtime content -->

 

<edmx:Runtime>

存储模型

<!-- SSDL content -->

<edmx:StorageModels>

<Schema Namespace="myModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">

<EntityContainer Name="myModelStoreContainer">

<EntitySet Name="myTab" EntityType="myModel.Store.myTab" store:Type="Tables" Schema="dbo" />

</EntityContainer>

<EntityType Name="myTab">

<Key>

<PropertyRef Name="a" />

</Key>

<Property Name="a" Type="nchar" Nullable="false" MaxLength="10" />

<Property Name="b" Type="nchar" Nullable="false" MaxLength="10" />

<Property Name="c" Type="nchar" MaxLength="10" />

<Property Name="d" Type="nchar" MaxLength="10" />

</EntityType>

</Schema>

</edmx:StorageModels>

概念模型

<!-- CSDL content -->

<edmx:ConceptualModels>

<Schema Namespace="myModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">

<EntityContainer Name="mySets">

<EntitySet Name="myTab" EntityType="myModel.myTab" />

</EntityContainer>

<EntityType Name="myTab">

<Key>

<PropertyRef Name="aa" />

</Key>

<Property Name="aa" Type="String" Nullable="false" MaxLength="10" Unicode="true" FixedLength="true" />

<Property Name="bb" Type="String" Nullable="false" MaxLength="10" Unicode="true" FixedLength="true" />

<Property Name="cc" Type="String" MaxLength="10" Unicode="true" FixedLength="true" />

<Property Name="dd" Type="String" MaxLength="10" Unicode="true" FixedLength="true" />

 

</EntityType>

</Schema>

</edmx:ConceptualModels>

映射

<!-- C-S mapping content -->

<edmx:Mappings>

<Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

<EntityContainerMapping StorageEntityContainer="myModelStoreContainer" CdmEntityContainer="mySets">

<EntitySetMapping Name="myTab">

<EntityTypeMapping TypeName="IsTypeOf(myModel.myTab)">

<MappingFragment StoreEntitySet="myTab">

<ScalarProperty Name="aa" ColumnName="a" />

<ScalarProperty Name="bb" ColumnName="b" />

<ScalarProperty Name="cc" ColumnName="d" />

<ScalarProperty Name="dd" ColumnName="c" />

</MappingFragment>

</EntityTypeMapping>

</EntitySetMapping>

</EntityContainerMapping>

</Mapping>

</edmx:Mappings>

 

</edmx:Runtime>

图形设计器的配置部份

<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->

<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2007/06/edmx">

<edmx:Connection>

<DesignerInfoPropertySet>

<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />

</DesignerInfoPropertySet>

</edmx:Connection>

<edmx:Options>

<DesignerInfoPropertySet>

<DesignerProperty Name="ValidateOnBuild" Value="true" />

</DesignerInfoPropertySet>

</edmx:Options>

<!-- Diagram content (shape and connector positions) -->

<edmx:Diagrams>

<Diagram Name="myModel">

<EntityTypeShape EntityType="myModel.myTab" Width="1.5" PointX="0.75" PointY="0.75" Height="1.7" IsExpanded="true" />

</Diagram>

</edmx:Diagrams>

</edmx:Designer>

 

</edmx:Edmx>

 

Context

public class myContext :ObjectContext

{

 

public myContext(EntityConnection connection) :

base(connection, "mySets")

{

 

}

 

public ObjectQuery<myTab> myTab

{

get

{

if ((this._myTab == null))

{

this._myTab = base.CreateQuery<myTab>("[myTab]");

}

return this._myTab;

}

}

private ObjectQuery<myTab> _myTab;

 

 

public void AddTomyTab(myTab myTab)

{

base.AddObject("myTab", myTab);

}

}

 

实体类

[EdmEntityType(NamespaceName = "myModel", Name = "myTab")]

[DataContract(IsReference = true)]

[Serializable()]

 

public class myTab :EntityObject

{

 

public static myTab CreatemyTab(string aa, string bb)

{

myTab myTab = new myTab();

myTab.aa = aa;

myTab.bb = bb;

return myTab;

}

 

private string _aa;

[EdmScalarProperty(EntityKeyProperty = true, IsNullable = false)]

[DataMember()]

public string aa

{

get

{

return this._aa;

}

set

{

this.ReportPropertyChanging("aa");

this._aa = StructuralObject.SetValidValue(value, false);

this.ReportPropertyChanged("aa");

}

}

 

 

 

private string _bb;

[EdmScalarPropertyAttribute(IsNullable = false)]

[DataMemberAttribute()]

public string bb

{

get

{

return this._bb;

}

set

{

 

this.ReportPropertyChanging("bb");

this._bb = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false);

this.ReportPropertyChanged("bb");

 

}

}

 

 

//

private string _cc;

[EdmScalarProperty()]

[DataMember()]

public string cc

{

get

{

return this._cc;

}

set

{

this.ReportPropertyChanging("cc");

this._cc =StructuralObject.SetValidValue(value, true);

this.ReportPropertyChanged("cc");

}

}

//

private string _dd;

[EdmScalarProperty()]

[DataMember()]

public string dd

{

get

{

return this._dd;

}

set

{

this.ReportPropertyChanging("dd");

this._dd = StructuralObject.SetValidValue(value, true);

this.ReportPropertyChanged("dd");

}

}

 

}

 

使用

myContext cn;

 

EntityConnection econ = new EntityConnection();

 

string s = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

 

provider=System.Data.SqlClient;

 

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

";

 

econ.ConnectionString = s;

 

cn = new myDate.myContext(econ);

 

this.dataGridView1.DataSource = cn.myTab;

 

 

使用向导创建模型

 

 

 

 

 

 

映射基本规则

 

1.[概念模型]的[数据类型],[键],[非空]约束要与[存储模型]对应

 

 

2.[概念模型]的属性名与[存储模型]的字段名不必一致

 

3.[存储模型]的字段如果有[键],[非空]约束, [概念模型]必需要有对应的属性与之映射

 

4. [概念模型]中出现的属性,在[存储模型]中必须要有对应的字段映射

5. [存储模型]的多个字段可以映射到[概念模型]的同一个属性上

加载时, [概念模型]的属性加载[存储模型]的第一个字段值

保存时, [概念模型]的属性会保存到[存储模型]的多个字段上

 

映射条件

 

  1. 一个字段,如果要作为映射条件,就不能映射到属性上  
  2. 加载数据时,只会加载符合条件的数据
  3. 添加数据时, 映射条件字段不可见, 射条件字段的字直接使用设计时的设定值

 

 

 

继承

1. 要实现继承,要使用映射条件进行筛选

2. [概念模型]与 [子概念模型] 所有的筛选条件不能有相的

3. [子概念模型] 自动得到 [概念模型] 的属性

4. [子概念模型] 中可以没有属性

5. 所的[子概念模型] 的筛选条件将以[Or]的方式影响[概念模型]的筛选,也就是说[概念模型]的记录将包括[子概念模型] 记录

6. [概念模型]与 [子概念模型] 共用同一个 [实体集], [实体集]的数据类型为 ObjectQuery<概念模型>

7. 可以使用类型转换的方式从[实体集]得[子概念模型]的数据

 

myContext context = new myContext();

ObjectQuery<myTab> a = context.myTabSets;

ObjectQuery<myTabEx1> b = context.myTabSets.OfType<myTabEx1>();

ObjectQuery<myTabEx2> c = context.myTabSets.OfType<myTabEx2>();

 

 

 

 

多表联合

 

1. 不要求在数据库中有关系,最好是主键对主键

2. 使用对联的方式,只筛选出有对应键的记录

3. 插入时,会在两个表中同时插入键相同的记录

4. 删除时,会同时在两个表中删除键相同的记录

 

 

关联

 

[(1)—(*)] 关联

 

1. [(1)—(*)]为主外关系,主键表为(1),外键表为(*)

2. 外键字段不能出现在[概念模型]中

3. 可以在向导中直接跟据数据库中的关系直接生成,也可以在设计[概念模型]时任意添加

4. 关联要绑定到外键表上

5. 要删除主键时,要保证内存中没有对应的外键数据

6. 插入外键数据,可以插入到主键的外键集合,也可创建带主键信息的外键对象后直接插入到Context中

设置

 

 

 

 

操作数据

从主键表访问数据

myContext context = new myContext();

 

ObjectQuery<tab1> tab1_List = context.tab1;

 

 

foreach (tab1 tab1_Entity in tab1_List)

{

 

Console.WriteLine("{0},{1}", tab1_Entity.a, tab1_Entity.b);

 

EntityCollection<tab2> tab2_List = tab1_Entity.Nvtab2;

 

tab2_List.Load(); //加载外键数据

 

foreach (tab2 tab2_Entity in tab2_List)

{

Console.WriteLine("{0},{1},{2}", tab2_Entity.ID,tab2_Entity.x,tab2_Entity.y);

}

}

lzm ,456

3 ,5 ,6

4 ,7 ,8

wxd ,123

1 ,1 ,2

2 ,3 ,4

从外键表访问数据

myContext context = new myContext();

ObjectQuery<tab2> tab2_List = context.tab2;

 

foreach (tab2 tab2_Entity in tab2_List)

{

Console.WriteLine("{0},{1},{2}", tab2_Entity.ID, tab2_Entity.x, tab2_Entity.y);

 

tab2_Entity.NVtab1Reference.Load(); //加载主键数据

 

tab1 tab1 = tab2_Entity.NVtab1;

 

Console.WriteLine("{0},{1}", tab1.a, tab1.b);

}

1 ,1 ,2

wxd ,123

2 ,3 ,4

wxd ,123

3 ,5 ,6

lzm ,456

4 ,7 ,8

lzm ,456

删除主键

myContext context = new myContext();

var v = context.tab1.First(p => p.a == "wxd");

 

// 要删除主键时,要保证内存中对应的外键数据为空

 

//v.Nvtab2.Load();

//if (v.Nvtab2.Count != 0)

//{

// List<tab2> list = new List<tab2>();

// foreach (var w in v.Nvtab2)

// {

// list.Add(w);

// }

// foreach (var ww in list)

// {

 

// context.DeleteObject(ww);

// }

//}

 

context.DeleteObject(v);

 

context.SaveChanges();

直接插入外键数据

myContext context = new myContext();

tab2 tab2 = new tab2();

 

tab2.ID = "101";

tab2.x = "555";

tab2.y = "666";

 

tab2.Nvtab1 = context.tab1.First(p => p.a == "wxd"); //要有主键信息

 

context.AddTotab2(tab2);

 

context.SaveChanges();

通过主键插入外键数据

myContext context = new myContext();

 

var tab1 = context.tab1.First(p => p.a == "wxd");

 

//第1条外键记录

tab2 r1 = new tab2();

r1.ID = "103";

r1.x = "r1";

r1.y = "r1";

tab1.Nvtab2.Add(r1);

 

//第2条外键记录

tab2 r2 = new tab2();

r2.ID = "104";

r2.x = "r1";

r2.y = "r1";

tab1.Nvtab2.Add(r2);

 

context.SaveChanges();

 

[(1)—(1)]关联

1. [(1)—(1)]为主主关系,既两个表的主键关联

2. 两个表的地位是平等的

3. 主键字段不能删除

4. 可以在向导中直接跟据数据库中的关系直接生成,也可以在设计[概念模型]时任意添加

5. 关联可绑定到任意一个表上

6. 删除时,要先将关联数据删除

7. 插入时,要有与之关联的数据

 

设置

 

操作数据

读取

myContext context = new myContext();

 

ObjectQuery<tab1> tab1_List = context.tab1;

 

 

foreach (tab1 tab1_Entity in tab1_List)

{

 

Console.WriteLine("{0},{1}", tab1_Entity.a, tab1_Entity.b);

 

tab1_Entity.NVtab3Reference.Load(); //加载关联数据

 

tab3 tab3 = tab1_Entity.NVtab3;

 

 

 

Console.WriteLine("{0},{1},{2}", tab3.a, tab3.m, tab3.n);

 

}

lzm ,456

lzm ,mmmm ,nnnn

wxd ,123

wxd ,nnn ,nnn

myContext context = new myContext();

 

ObjectQuery<tab3> tab3_List = context.tab3;

 

 

foreach (tab3 tab3_Entity in tab3_List)

{

 

Console.WriteLine("{0},{1},{2}", tab3_Entity.a, tab3_Entity.m,tab3_Entity.n );

 

tab3_Entity.NVtab1Reference.Load(); //加载关联数据

 

tab1 tab1 = tab3_Entity.NVtab1;

 

 

 

Console.WriteLine("{0},{1}", tab1.a, tab1.b );

 

}

lzm ,mmmm ,nnnn

lzm ,456

wxd ,nnn ,nnn

wxd ,123

删除

myContext context = new myContext();

 

var tab3 = context.tab3.First(p => p.a == "wxd");

 

//-要按顺序

 

tab3.NVtab1Reference.Load(); // 加载关联数据

 

context.DeleteObject(tab3.NVtab1); //删除关联数据

 

context.DeleteObject(tab3); // 删除

 

//

context.SaveChanges();

插入

myContext context = new myContext();

 

tab1 tab1 = new tab1();

tab1.a = "wxwinter";

tab1.b = "789";

 

//关联

tab1.NVtab3 = new tab3();

tab1.NVtab3.a = "wxwinter";

tab1.NVtab3.m = "mm";

tab1.NVtab3.n = "mm";

 

context.AddTotab1(tab1);

 

context.SaveChanges();

 

[(1)—(0..1)]关联

设计与[(1)—(0..1)]相同.

 

1. 插入(1)时,可以不插入(0..1)

2. 删除(0..1) 时,可以不删除(1)

3. 插入(0..1)时,需要插入(1)

4. 删除(1) 时, 需要删除(0..1)

 

 

 

 

[(*)—(*)]关联

 

 

显示中转方式

 

隐示中转方式

1. 要实现这个关联,要将关联绑定到 [中转表(安排表)]上

2. 所用的[中转表(安排表)]不能以[概念模型]的方式出现

3. 两个表的地位是平等的

4. 添加一端的(*)时,不受另一端(*)约束

5. 可以在添加一端的(*)时,通过[关联集合]将数据也添加到[关联表]与[中转表]中

6. 如果加载关联数据,[中转表]中的关联数据也会被删除.

如果不加载关联数据,将不会删除[中转表]中的关联数据

 

 

 

操作数据

得到数据

myContext context = new myContext();

 

ObjectQuery<部门表> bList = context.部门表;

 

foreach (部门表 b in bList)

{

Console.WriteLine("{0},{1}", b.部门, b.部门说明);

 

b.场地表.Load();

 

EntityCollection<场地表> cList = b.场地表;

 

foreach (场地表 c in cList)

{

Console.WriteLine("{0},{1}", c.场地, c.场地说明);

}

}

丙 ,1

a ,11

b ,22

c ,33

甲 ,2

a ,11

乙 ,3

a ,11

b ,22

myContext context = new myContext();

 

ObjectQuery<场地表> cList = context.场地表;

 

foreach (场地表 c in cList)

{

Console.WriteLine("{0},{1}", c.场地, c.场地说明);

 

c.部门表.Load();

 

EntityCollection<部门表> bList = c.部门表;

 

foreach (部门表 b in bList)

{

Console.WriteLine("{0},{1}", b.部门, b.部门说明);

}

}

a ,11

丙 ,1

甲 ,2

乙 ,3

b ,22

丙 ,1

乙 ,3

c ,33

丙 ,1

删除数据

myContext context = new myContext();

 

场地表 c = context.场地表.First(p => p.场地 == "a");

 

 

//1.如果加载关联数据,[中转表]中的关联数据也会被删除,

//2.如果不加载关联数据,将不会删除[中转表]中的关联数据

 

//c.部门表.Load(); // <-------[是/否]

 

 

context.DeleteObject(c);

context.SaveChanges();

添加数据

myContext context = new myContext();

 

场地表 c = new 场地表();

c.场地 = "d";

c.场地说明 = "44";

context.AddTo场地表(c);

context.SaveChanges();

同时添加数据到

[源表],

[关联表],

[中转表]

//可以将数据同时添加[源表],[关联表],[中转表]

myContext context = new myContext();

 

场地表 c = new 场地表();

c.场地 = "e";

c.场地说明 = "55";

c.部门表.Add(new 部门表() { 部门 = "vv", 部门说明 = "vv" });

context.AddTo场地表(c);

context.SaveChanges();

 

 

映射存储过程与函数

 

返回表型存储过程

存储过程

查询

PRSelectDBItem

CREATE PROCEDURE PRSelectDBItem

@v nvarchar(50)

 

as

select * from DBItem where ItemID=@v

 

使用向导生成映射

myContext context = new myContext();

 

ObjectResult<DBItem> dbitemList= context.PRSelectDBITem("a");

 

foreach (var r in dbitemList)

{

Console.WriteLine("{0},{1}", r.ItemID, r.ItemMatter);

}

 

代码实现

public class Context :ObjectContext

{

public Context() : base("name=myContext", "myContext")

{ }

public ObjectResult<DBItem> PRSelectDBITem(string v)

{

return base.ExecuteFunction<DBItem>("PRSelectDBITem", new ObjectParameter("v", v));

}

}

Context context = new Context();

 

ObjectResult<DBItem> dbitemList = context.PRSelectDBITem("a");

 

foreach (var r in dbitemList)

{

Console.WriteLine("{0},{1}", r.ItemID, r.ItemMatter);

}

 

 

 

命令型存储过程

存储过程

插入

PRinsertDBItem

CREATE PROCEDURE PRinsertDBItem

@ItemID nvarchar(50),

@ItemMatter nvarchar(50)

 

as

insert into DBItem (ItemID,ItemMatter) values (@ItemID ,@ItemMatter)

 

使用向导生成映射

 

代码实现

 

string econString = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

 

provider=System.Data.SqlClient;

 

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

";

 

 

EntityConnection econ = new EntityConnection();

econ.ConnectionString = econString;

 

 

 

EntityCommand ecmd = new EntityCommand();

 

ecmd.CommandType = CommandType.Text;

 

ecmd.Connection = econ;

 

ecmd.CommandText = "myContext.PRinsertDBItem";

 

ecmd.CommandType = CommandType.StoredProcedure;

 

 

 

EntityParameter p1 = new EntityParameter("ItemID", System.Data.DbType.String);

p1.Value = "aaa";

 

EntityParameter p2 = new EntityParameter("ItemMatter", System.Data.DbType.String);

p2.Value = "bbb";

 

 

ecmd.Parameters.Add(p1);

 

ecmd.Parameters.Add(p2);

 

 

econ.Open();

 

ecmd.ExecuteNonQuery();

 

 

参数返回值型存储过程

存储过程

 

算加法

PRadd

CREATE PROCEDURE PRadd

@x int = 0,

@y int = 0,

@s int = 0 output

 

as

set @s= @x * @y

 

使用向导生成映射

 

代码实现

string econString = @"

metadata=res://*/myModel.csdl

|res://*/myModel.ssdl

|res://*/myModel.msl

;

 

provider=System.Data.SqlClient;

 

provider connection string=""

Data Source=.;

Initial Catalog=LingTestDB;

Integrated Security=True;

MultipleActiveResultSets=True;

""

";

 

 

EntityConnection econ = new EntityConnection();

econ.ConnectionString = econString;

 

 

 

EntityCommand ecmd = new EntityCommand();

 

ecmd.CommandType = CommandType.Text;

 

ecmd.Connection = econ;

 

ecmd.CommandText = "myContext.PRadd";

 

ecmd.CommandType = CommandType.StoredProcedure;

 

 

 

EntityParameter p1 = new EntityParameter("x", System.Data.DbType.Int32);

p1.Value = 123;

 

EntityParameter p2 = new EntityParameter("y", System.Data.DbType.Int32);

p2.Value = 456;

 

 

EntityParameter rt = new EntityParameter("s",

System.Data.DbType.Int32,

0,

ParameterDirection.Output,

false,

0,

0,

"",

DataRowVersion.Current,

0);

 

ecmd.Parameters.Add(p1);

 

ecmd.Parameters.Add(p2);

ecmd.Parameters.Add(rt);

 

 

econ.Open();

 

ecmd.ExecuteNonQuery();

 

Console.WriteLine(rt.Value); //579


转载于:https://www.cnblogs.com/lingyuan/archive/2010/10/29/1864347.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教你怎么一下哄好赌气的女朋友​

1 教你怎么一下哄好赌气的女朋友▼2 有钱人的隔离生活也格外丰富多彩▼3 狗&#xff1a;有一种被掏空的感觉▼4 湘西赶尸的原理找到了&#xff01;▼5 泰罗奥特曼在打奥特曼你先去找迪迦奥特曼玩▼6 看起来就很值钱的哟而且还是微波炉专用哦&#xff01;▼7 看完了有点恐…

最受欢迎中国技术博客? 我才狂写4周唉

今天察看了一下blog的访问来源&#xff0c;居然发现有很多点击来自同一个URL&#xff1a;http://blog.zdnet.com.cn/popblogger50.shtml。进去一看&#xff0c;发现是一个‘最受欢迎中国技术博客’评选活动。这让我很惊讶&#xff0c;因为这个Blog1&#xff09;放得很冷僻&…

headless 怎么处理_公司清算注销债务怎么处理

公司解散2020-09-10 14:27:00更新公司在经营的过程中会产生很多应付款的&#xff0c;最为常见的是应付货款&#xff0c;应付款是指应该支付而未支付的款项&#xff0c;是属于债务的一种&#xff0c;那么公司注销清算前应付款如何处理?下面由华律网小编为读者进行的解答&#x…

WTMPlus 低代码平台来了

点击上方蓝字关注我们WTMPlusWTM框架开源4年以来&#xff0c;凭借其良好的设计&#xff0c;超高的开发效率&#xff0c;出色的性能和广泛的适用性得到了越来越多用户的喜爱&#xff0c;WTM的Nuget包累计下载已经超过了14万次&#xff0c;平均每天都有100人次使用WTM在开发项目。…

数据结构C#版笔记--堆栈(Stack)

堆栈(Stack)最明显的特征就是“先进后出”&#xff0c;本质上讲堆栈也是一种线性结构&#xff0c;符合线性结构的基本特点&#xff1a;即每个节点有且只有一个前驱节点和一个后续节点。 相对前面学习过的顺序表、链表不同的地方在于&#xff1a;Stack把所有操作限制在"只能…

为什么女生会有体香?

全世界只有3.14 % 的人关注了爆炸吧知识本文转载自微信公众号一只学霸&#xff08;ID&#xff1a;bajie203&#xff09;今天渣哥向我诉说了一个困扰了他很久的疑问看着渣哥这一副无知的样子学霸的内心暗爽就让你伟大而又聪慧的霸霸来为你揭开女生的真面目一说到这个学霸知道你们…

手游开发者交流会议暨OGEngine新版发布

2019独角兽企业重金招聘Python工程师标准>>> 手游开发者交流会议暨OGEngine新版发布 由OGEngine举办的第二次手游开发者交流会议以圆桌会议方式在深圳高新园举行。会议不仅吸引了手游开发者&#xff0c;也有海外支付商&#xff0c;国内外的手游发行商参加。 会议环绕…

python 绘制围棋棋盘_围棋之规则基础(一)

★本期导读&#xff1a;一、围棋的下法二、气★正文&#xff1a;一、围棋的下法1、 对局双方各执一色棋子。2、 空枰开局。3、 黑先白后&#xff0c;交替着一子于棋盘的交叉点上。4、 棋子下定后&#xff0c;不再向其它点移动。5、 轮流下子是双方的权利&#xff0c;但允许任何…

php pdo 查询语句,PDO:预处理语句(参数化查询)

(PDO(PHP data object/PHP数据对象))[PDO|预处理语句|参数化查询]The database library called PHP Data Objects or PDO for short can use drivers for many different database types, and supports a very important feature known as prepared statements, sometimes also…

WiFi密码都不会破译​还想考清华?​

1 18万的飞机票也能秒空&#xff1f;&#xff1f;&#xff1f;留学生&#xff1a;这是救命钱啊▼2 WiFi密码都不会破译还想考清华&#xff1f;▼3 好羡慕有这样的妈妈▼4 猫&#xff1a;你别进来&#xff0c;我这儿不接待小孩儿&#xff01;孩子&#xff1a;我就进去看看▼…

ASP.NET网页文本编辑器的使用

ASP.NET网页文本编辑器的使用&#xff0c;效果图如下&#xff1a; 这里要用到DotNetTextBox.dll组件&#xff0c;具体内容可以在http://sites.google.com/site/zhangqs008/chang-yong-gong-ju 下载&#xff0c;使用方法如下&#xff1a; 1.将“DotNetTextBox.dll”文件添加到工…

在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...

如果你要问我最近什么手游最火&#xff1f;那我的回答肯定就是《英雄联盟》手游了&#xff01;自从拳头公司在前几天爆出部分地区公测的消息之后&#xff0c;很多国内玩家就已经按耐不住自己激动的心了。由于国服没有公测&#xff0c;所以许多国内玩家便纷纷涌入日服和韩服。这…

php 电压 异常,tv断线警告是什么原因

电力系统中TV断线&#xff0c;就是电压互感器断线。TV断线一般可以分为TV 一次侧(高压)断线和二次侧(低压)断线&#xff0c;无论是哪一侧的断线&#xff0c;都将会使TV二次回路的电压异常&#xff0c;影响继电保护装置的正确动作。 (推荐学习&#xff1a;phpstorm)如果发生TV一…

《JavaScript 高级程序设计》 7.1 正则表达式支持

转载于:https://www.cnblogs.com/xiaochaohuashengmi/archive/2010/11/07/1871100.html

豆瓣9.7,这些舍不得看完的神剧,看一集少一集啊!

全世界只有3.14 % 的人关注了爆炸吧知识今天给大家介绍一位好朋友——菌菌。菌菌&#xff0c;作为资深美剧迷英语博主&#xff0c;收藏了很多经典美剧、动画资源&#xff0c;每天还会和大家分享新鲜有趣的英语知识。喜欢看美剧追动画和立志学好英语的小伙伴千万别错过&#xff…

因子分析最少要有几个因子_Re0:魔女司教和魔女是什么关系?他们的魔女因子是魔女给的吗...

​魔女司教和魔女的能力一点关系都没有&#xff0c;而且魔女教一开始是正常的&#xff0c;直到艾米莉亚父母死后才出现各种大罪司教发疯&#xff0c;怠惰是艾米莉雅的养父&#xff0c;艾米莉亚一族守护的封印被虚饰魔女入侵&#xff0c;怠惰为了守护强行融合了魔女基因&#xf…

徒手打造基于Spark的数据工厂(Data Factory):从设计到实现

在大数据处理和人工智能时代&#xff0c;数据工厂&#xff08;Data Factory&#xff09;无疑是一个非常重要的大数据处理平台。市面上也有成熟的相关产品&#xff0c;比如Azure Data Factory&#xff0c;不仅功能强大&#xff0c;而且依托微软的云计算平台Azure&#xff0c;为大…

深度学习框架PyTorch与TensorFlow,谁更胜一筹?

全世界只有3.14 % 的人关注了爆炸吧知识自从2012年深度学习再一次声名鹊起以来&#xff0c;许多机器学习框架都争先恐后地要成为研究人员和行业从业者的新宠。面对如些众多的选择&#xff0c;人们很难判断最流行的框架到底是什么。在某些情况下&#xff0c;深度学习或深度迁移学…

Windows Server 2008 R2 之二十一远程桌面服务RD之二

一、远程桌面授权 远程桌面授权&#xff08;RD 授权&#xff09;以前称为终端服务授权&#xff08;TS 授权&#xff09;&#xff0c;它能够管理每个设备或用户与远程桌面会话主机&#xff08;RD 会话主机&#xff09;服务器连接所需的远程桌面服务客户端访问许可 (RDS CAL)。使…

件工程项目开发最全文档模板_一文带你了解微信小程序社区和小程序开发

微信小程序越来越受欢迎&#xff0c;很多小白也想制作自己的小程序。小白若想自己顺利制作&#xff0c;有两种方法&#xff1a;一种是下载安装微信官方开发者工具&#xff0c;然后写代码开发&#xff1b;一种是使用第三方小程序制作工具&#xff0c;选个现成的小程序模板&#…